给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
输入: [2, 6, 4, 8, 10, 9, 15] , 输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
说明 :
输入的数组长度范围在 [1, 10,000]。
输入的数组可能包含重复元素 ,所以升序的意思是<=。
解法一:
好难写啊! 复制数组就花了好长时间,
num2 需要先切一个与 nums 等长的切片出来,再往里面复制值才会成功。
另外go竟然不支持三元表达式,这真的不习惯啊。
思路
复制一个新数组 num2 ,对新数组排序,再比较两个数组的元素是否一致,从而找出最短子数组的开始-结束位置。
func findUnsortedSubarray(nums []int) int {
num2 := make([]int,len(nums))
copy(num2,nums)
sort.Ints(num2)
lo,hi :=-1,-1
for key,value := range nums {
if lo==-1 && value != num2[key] {
lo=key;
}
if value != num2[key] {
hi = key
}
}
if hi == lo {
return 0
}
return hi-lo+1
}
执行用时:76 ms
已经战胜 24.00 % 的 golang 提交记录