LeetCode第十七天栈之最短无序连续子数组581
程序员文章站
2022-03-21 07:48:48
暴力+栈 public static int findUnsortedSubarray(int[] nums) { int[] results=new int[nums.length]; for (int i = 0; i < nums.length; i++) { results[i]=nums[i]; } Arrays.sort(results); Deque
暴力+栈
public static int findUnsortedSubarray(int[] nums) {
int[] results=new int[nums.length];
for (int i = 0; i < nums.length; i++) {
results[i]=nums[i];
}
Arrays.sort(results);
Deque<Integer> stack=new ArrayDeque<>();
for (int i = 0; i <nums.length ; i++) {
stack.push(i);
if (nums[i]==results[i]){
stack.pop();
}
}
return stack.isEmpty()?0:(stack.peek()-stack.peekLast()+1);
}
学以致用
就这,???!!!难度还是普通,前后需要脑子,我都怀疑做了假的leetcode,关键还是接近97的击败率!!
- 复制原来数组
- 生成新的数组并且排序
Arrays.sort(results);
- 建立一个栈,存入原数组下标索引
stack.push(i);
- 一个一个放入栈比较(排序后的与排序前)
if (nums[i]==results[i])
- 一样的就出栈,不一样的不管他
stack.pop();
- 我只需要只要最开始顺序乱的,和最后一个顺序乱的索引不就行了
- 于是返回取栈顶索引与栈底索引做差
return stack.isEmpty()?0:(stack.peek()-stack.peekLast()+1);
- 做完感觉:就这就这???
本文地址:https://blog.csdn.net/ss977/article/details/110881643