給定一個數組,刪除其中連續的長度最小的子數組,使剩餘的元素升序

func getMinal(nums []int) int {
	if len(nums) <= 1 {
		return 0
	}
	end := -1
	start := -1
	for i := len(nums) - 1; i > 0; i-- {
		if nums[i] < nums[i-1] {
			end = i
			break
		}
	}
	if -1 == end { // 原始數組有序, 非降序
		return 0
	}
	for i := 0; i < len(nums)-1; i++ {
		if nums[i] > nums[i+1] {
			start = i
			break
		}
	}
	newStart := start
	newEnd := end
	for ;newStart >= 0; newStart -- {
		if nums[newStart] <= nums[end] {
			break
		}
	}
	if newStart == -1 { // 刪除的連續自數組是從下標0開始的一部分
		return end
	}
	for ; newEnd <= len(nums) - 1; newEnd++ {
		if nums[newEnd] >= nums[start] {
			break
		}
	}

	if newEnd == len(nums) { //  刪除的數組是數組的最後一部分
		return len(nums) - start - 1
	}

	return min(end - newStart - 1, newEnd - start - 1)
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章