704 题
主要强调,左闭右闭的情况,就是每次查询都会和 [left, right] 进行比较。所以后面的都是mid-1,mid+1 的情况。
package main
func search(nums []int, target int) int {
// 二分查找方法
// 每次查找都是左闭右闭的情况
left := 0
right := len(nums) - 1
var mid int
for left <= right {
mid = left + ((right - left) >> 1)
if target > nums[mid] {
left = mid + 1
} else if target < nums[mid] {
right = mid - 1
} else {
return mid
}
}
return -1
}
func main() {
res := search([]int{-1, 0, 3, 5, 9, 12}, 9)
println(res)
}
27 移除元素
思路:直观的想法就是,遇到等于val的时候,之后后面的往前面一个个覆盖,类似于是插入排序。
// 使用快慢指针的方法,
快指针一定指向不是val的元素
相当于是遇到等于不等与的情况,slow++,然后和fast换
当遇到等于的情况,slow就指向val了,
func removeElement(nums []int, val int) int {
// 使用快慢指针的方法,直观的想法就是,遇到等于val的时候,之后后面的
var slow = 0
for fast := 0; fast < len(nums); fast++ {
if nums[fast] != val {
nums[slow] = nums[fast]
slow++
}
}
return slow
}