給定乙個無序陣列,求出需要排序的最短子陣列的長度。
例如:arr=返回4,因為只有[5,3,4,2]需要排序。
解決這個問題可以在時間複雜度為o(n)、額外空間複雜度為o(1)完成。
初始化變數nominindex=-1,從右向左遍歷,便利的過程記錄右側出現過的數的最小值,記為min。假設當前數為arr[i],如果
arr[i]>min,說明如果要整體有序,min值必然會移到arr[i]的左邊。用nominindex記錄最左邊出現這種情況的位置。如果遍歷完成後,
nominindex的值依然為-1,說明從右向左始終不公升序,原陣列本來就有序,直接返回0,即完全不需要排序。
接下來從左向右遍歷,遍歷的過程記錄左側出現過的數的最大值。記為max。假設當前數為arr[i],如果arr[i]
遍歷完後,arr[nominindex…nomaxindex]是真正需要排序的部分。返回它的長度即可。
publicstatic
int getminlength(int
arr)
int min = arr[arr.length - 1];
int nominindex = -1;
for (int i = arr.length - 2; i != -1; i--)
else
}if (nominindex == -1)
int max = arr[0];
int nomaxindex = -1;
for (int i = 1; i != arr.length; i++)
else
}return nomaxindex - nominindex + 1;
}
2 1 需排序的最短子陣列長度
題目描述 對於乙個無序陣列a,請設計乙個演算法,求出需要排序的最短子陣列的長度。給定乙個整數陣列a及它的大小n,請返回最短子陣列的長度。測試樣例 1,5,3,4,2,6,7 7 返回 4 1 2 這個題在牛客網上的講解我感覺是有點問題的,3因為預設了公升序排序!4如下實現對陣列 8,7,6,5,4,...
需要排序的最短子陣列的長度
演算法描述 1.從左往右找 當前值比max小 的一系列情況 初始 max arr 0 如果當前元素比max大,max就等於當前元素 如果當前元素比max小,max不變,然後繼續往後找,直到最後一次出現 當前值比max小 的情形,記下此時的下標為k。2.從右往左找 當前值比min大 的一系列情況 初始...
待排序的最短子陣列長度 C 版
題目 對於乙個陣列,請設計乙個高效演算法計算需要排序的最短子陣列的長度。給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的長度。原序列位置從0開始標號,若原序列有序,返回0 保證a中元素均為正整數。思路 分別從 左 右 記錄最大元素值 比較最大元素值和當前遍歷元素的大小 如果 最大...