1、題目數組
一、審題 spa
二、分析指針
給定一個無序整形數組,將其變爲有序,最少要將連續的多少個元素進行排序。code
2、解答blog
一、思路排序
① 採用兩個指針。 begin 記錄須要排序的元素的最低下標; end 記錄須要排序的元素的最高下標。class
② 順序遍歷數組, 採用變量 max,記錄到當前元素爲止的最大元素值,若當前元素值 < max ,即此元素須要進行從新排序。採用 end 記錄。變量
③ 逆序遍歷數組,採用變量 min,記錄到當前元素爲止的最小元素值,若當前元素值 > min,即詞元素值也須要從新怕徐。採用 begin 記錄。遍歷
④ 最終須要排序的元素下標序列爲 begin ~ end 。 總元素個數爲 end - begin +1;im
public int findUnsortedSubarray(int[] nums) { int n = nums.length; int begin = -1, end = -2; // 若數組已經有序,則最終的結果 end - begin + 1 == 0 int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE; // begin 比 min 大, end 比 max 小 // 找到最後的一個元素, 這個元素從左看比最大的石頭小(end 後面的都比最大的數值大) for (int i = 0; i < n; i++) { max = Math.max(max, nums[i]); if(nums[i] < max) end = i; } // 找到最前面的一個元素,這個元素從右看比最小的石頭大。(begin 前面的都比最下的數值小) for (int i = n - 1; i >= 0; i--) { min = Math.min(min, nums[i]); if(nums[i] > min) begin = i; } return end - begin + 1; }