最短無序連續子陣列

2021-10-11 15:51:06 字數 1559 閱讀 2583

最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。

你找到的子陣列應是最短的,請輸出它的長度。

示例 1:

輸入:[2, 6, 4, 8, 10, 9, 15]輸出:5解釋:你只需要對 [6, 4, 8, 10, 9] 進行公升序排序,那麼整個表都會變為公升序排序。

說明 :

輸入的陣列長度範圍在 [1, 10,000]。

輸入的陣列可能包含重複元素 ,所以公升序的意思是<=。

方法一:排序後比較找到不相同的區間

public int findunsortedsubarray(int nums) 

int temp = nums.clone();

arrays.sort(temp);

int l = -1, r = -1;

for (int i = 0; i < nums.length; i++) else }}

//不存在不相同的元素,即本來就有序

if (l == - 1 && r == - 1)

//只是兩個元素不相同,長度即為這個區間的大小

if (l != -1 && r != -1)

//只有乙個不相同的元素

return 1;

}

方法二:棧

public int findunsortedsubarray(int nums) 

stack.push(i);

}stack.clear();

//找到右邊界

for (int i = nums.length - 1; i >= 0; i--)

stack.push(i);

}if (l == nums.length)

return r - l + 1;

}

方法三:雙指標

public int findunsortedsubarray(int nums) 

int n = nums.length;

int max = nums[0];

int min = nums[n - 1];

int l = n, r = -1;

for (int i = 0; i < n; i++) else

}if (l == n)

for (int i = n - 1; i >= 0; i--) else

}return l - r + 1;

}

最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。方法一 排序演...

最短無序連續子陣列

題目描述 給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的。示例 1 輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。說明 輸入...

最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。示例 1 輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。說明...