数组越界问题
前言:
panic: runtime error: index out of range [-1]
在写一道很简单的二分查找的题的时候,遇到了这样的报错,
力扣题:
func nextGreatestLetter(letters []byte, target byte) byte {
left,right := 0,len(letters)-1
for left <= right {
mid := left + (right-left)/2
if letters[mid] > target && letters[mid-1] < target {
return letters [mid]
}
if letters[mid] > target {
right = mid-1
}else{
left = mid+1
}
}
return letters [0]
}
当时就很奇怪逻辑上是完全没错的呀,仔细看报错:
panic: runtime error: index out of range [-1]
才发现是数组越界问题
也就是mid有可能是为0的
那么letters[0-1]肯定是不行的,所以简单改一下代码就可以了
改过的是这样
func nextGreatestLetter(letters []byte, target byte) byte {
left,right := 0,len(letters)-1
for left <= right {
mid := (left+right)>>1
mid1:=0
if mid-1<0{
mid1 = 0
}else{
mid1 = mid-1
}
if letters[mid] > target{
if letters[mid1] <= target{
return letters [mid]
}
right = mid-1
}else{
left = mid+1
}
}
return letters[0]
}
完美通过