581. 最短無序連續子陣列(關鍵字:逆序數,單調棧)
給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。
你找到的子陣列應是最短的,請輸出它的長度。
示例 1:
輸入: [2, 6, 4, 8, 10, 9, 15]
輸出: 5
解釋: 你只需要對 [6, 4, 8, 10, 9] 進行公升序排序,那麼整個表都會變為公升序排序。
說明 :
輸入的陣列長度範圍在 [1, 10,000]。
輸入的陣列可能包含重複元素 ,所以公升序的意思是<=。
基本思路1:先找出左邊不在其正確位置的第乙個元素,再找出右邊不在其位置的第乙個元素,時間複雜度o(n2)。
int findunsortedsubarray(vector& nums)
if(flag)
break;
else
l++;
}while(r>=0)
}return max(0,end-start+1);
}
思路四:何時出現不在正確位置的情況 ,首先出現逆序的情形下,所以可以使用單調棧,時間o(n),空間o(n);
int start=nums.size(),end=-1;
stackstk;
for(int i=0;inums[i])
stk.push(i);
}while(!stk.empty())
stk.pop();
for(int j=nums.size()-1;j>=0;j--)
return max(0,end-start+1);
}
581 最短無序連續子陣列
給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。複製陣列,對該陣列排序,然後和原陣列相比較,得到兩頭第乙個不一樣元素的位置,這個區間的長度即為返回值。這種方式的負責度是 o 排序的複雜度 o n ...
581 最短無序連續子陣列
給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。輸入的陣列長度...
581 最短無序連續子陣列
給你乙個整數陣列nums,你需要找出乙個連續子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。請你找出符合題意的最短子陣列,並輸出它的長度。示例 1 輸入 nums 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會...