https://leetcode.com/problems/shortest-subarray-to-be-removed-to-make-array-sorted/description/
給定整數陣列 arr
, 移除子陣列 (可空) 使得剩餘元素呈非遞減
求最短移除多長子陣列?
這題就用 two pointer 技巧解就好
我覺得好像沒什麼好講的了
C++ 參考解答:
class Solution
{
public:
int findLengthOfShortestSubarray(vector<int> &arr)
{
const int n = arr.size();
int j = n - 1;
while (j > 0 && arr[j - 1] <= arr[j])
--j;
if (j == 0)
return 0;
int ans = j;
for (int i = 0; i < n; ++i)
{
if (i > 0 && arr[i - 1] > arr[i])
break;
while (j < n && arr[i] > arr[j])
++j;
ans = min(ans, j - i - 1);
}
return ans;
}
};
Go 參考解答:
func findLengthOfShortestSubarray(arr []int) int {
n := len(arr)
j := n - 1
for j > 0 && arr[j-1] <= arr[j] {
j--
}
if j == 0 {
return 0
}
ans := j
for i := 0; i < n; i++ {
if i > 0 && arr[i-1] > arr[i] {
break
}
for j < n && arr[i] > arr[j] {
j++
}
if ans > (j - i - 1) {
ans = j - i - 1
}
}
return ans
}