Try   HackMD

LeetCode 1574. Shortest Subarray to be Removed to Make Array Sorted

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
}