相关信息
算法题实现
jspackage main
import "fmt"
func search(nums []int, key int) bool {
left, right := 0, len(nums)-1
for left <= right {
mid := left + (right-left)/2
if nums[mid] == key {
return true
}
// 左半部分有序
if nums[left] <= nums[mid] {
if nums[left] <= key && key < nums[mid] {
right = mid - 1
} else {
left = mid + 1
}
} else {
// 右半部分有序
if nums[mid] < key && key <= nums[right] {
left = mid + 1
} else {
right = mid - 1
}
}
}
return false
}
func main() {
nums := []int{7, 8, 9, 10, 1, 2, 3}
fmt.Println(search(nums, 1)) // true
fmt.Println(search(nums, 8)) // true
fmt.Println(search(nums, 5)) // false
}
jsrow = idx / n col = idx % n
该题的重点就是知道如何把二维数组当做一维数组进行处理,然后进行二分查找
给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
jsfunc searchMatrix(matrix [][]int, target int) bool {
if len(matrix) == 0 || len(matrix[0]) == 0 {
return false
}
m, n := len(matrix), len(matrix[0])
left, right := 0, m*n-1
for left <= right {
mid := left + (right-left)/2
row := mid / n
col := mid % n
if matrix[row][col] == target {
return true
} else if matrix[row][col] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return false
}
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!