Java?C++題解leetcode769最多能完成排序的塊
題目要求

思路:模擬

Java
class Solution {
public int maxChunksToSorted(int[] arr) {
int n = arr.length, res = 0;
int min = n, max = -1;
for (int r = 0, l = 0; r < n; r++) {
min = Math.min(min, arr[r]);
max = Math.max(max, arr[r]);
if (l == min && r == max) {
res++;
l = r + 1;
min = n;
}
}
return res;
}
}
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(1)
再改進(jìn)【拜題設(shè)限制所賜】
手推一遍上面的執(zhí)行過程發(fā)現(xiàn)最小值沒有什么意義,可以只用最大值衡量,找一個(gè)區(qū)間右端點(diǎn)rrr,這個(gè)r與arr在[0,r]內(nèi)的最大值相等;
- 從頭開始統(tǒng)計(jì)當(dāng)前向前區(qū)間內(nèi)的最大值,若該值與遍歷下標(biāo)相等,則塊滿足題設(shè)條件,答案加一;
- 然后無需進(jìn)行歸零,因?yàn)楹罄m(xù)的所有值一定都大于當(dāng)前塊的最大值;
- 重復(fù)遍歷與比較。
之所以可以省略最小值的統(tǒng)計(jì),是因?yàn)閴K的大小由最大值決定,小的值都在前面的塊里被排序,所以一定能在當(dāng)前塊找到一個(gè)與左端點(diǎn)相等的值(最小值);
- 此外,當(dāng)前統(tǒng)計(jì)到的最大值既是當(dāng)前區(qū)間內(nèi)的最大值,也是arr從頭至此的最大值。
class Solution {
public int maxChunksToSorted(int[] arr) {
int res = 0, max = -1;
for (int r = 0; r < arr.length; r++) {
max = Math.max(max, arr[r]);
if (r == max)
res++;
}
return res;
}
}
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(1)
C++
- 第一萬次注意max變量和max方法的命名沖突……
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int res = 0, maxx = -1;
for (int r = 0; r < arr.size(); r++) {
maxx = max(maxx, arr[r]);
if (r == maxx)
res++;
}
return res;
}
};
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(1)
Rust
impl Solution {
pub fn max_chunks_to_sorted(arr: Vec<i32>) -> i32 {
let (mut res, mut maxx) = (0, -1);
for r in 0..arr.len() {
maxx = maxx.max(arr[r]);
if r as i32 == maxx {
res += 1;
}
}
res
}
}
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(1)
總結(jié)
- 簡(jiǎn)單到?jīng)]什么好總結(jié)的……題設(shè)的限制極大地降低了題目難度,本來看題還沒有意識(shí)到,看到示例就意識(shí)到了今天可以擁有簡(jiǎn)單題的快樂~
- 看官方的題解管這個(gè)再改進(jìn)方法叫貪心,分析了好長(zhǎng)好長(zhǎng)……看著就頭疼
- 還有其他解法用棧的,本質(zhì)上思路一樣,是理解比較淺但實(shí)現(xiàn)稍復(fù)雜的方法。
以上就是Java C++題解leetcode769最多能完成排序的塊的詳細(xì)內(nèi)容,更多關(guān)于Java C++最多能完成排序的塊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java設(shè)計(jì)模式之創(chuàng)建者模式詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之創(chuàng)建者模式詳解,創(chuàng)建者模式,顧名思義,就是提供友好的創(chuàng)建對(duì)象的方式?,對(duì)象都是?new?出來的,但是在一些情況下,這種方式不是很友好,首先,它不夠直觀,需要的朋友可以參考下2023-08-08
spring cloud oauth2 feign 遇到的坑及解決
這篇文章主要介紹了spring cloud oauth2 feign 遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之遞歸
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之遞歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑
這篇文章主要介紹了Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
SpringBoot導(dǎo)入mail依賴報(bào)錯(cuò)問題解決
這篇文章主要介紹了SpringBoot導(dǎo)入mail依賴報(bào)錯(cuò)問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
java數(shù)據(jù)庫操作類演示實(shí)例分享(java連接數(shù)據(jù)庫)
java數(shù)據(jù)庫操作類演示實(shí)例分享,大家參考使用吧2013-12-12
IDEA2020.1啟動(dòng)SpringBoot項(xiàng)目出現(xiàn)java程序包:xxx不存在
這篇文章主要介紹了IDEA2020.1啟動(dòng)SpringBoot項(xiàng)目出現(xiàn)java程序包:xxx不存在,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot實(shí)現(xiàn)自定義配置文件提示的方法
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)自定義配置文件提示的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03

