LeetCode 704. 二分查找
有两种解题思路:
1、区间左闭右闭,right初始化为len(nums) - 1,for的条件为left <= right,更新right的时候为mid-1
func search(nums []int, target int) int {
left := 0
right := len(nums) - 1
for left <= right{
mid := (right + left) / 2
if nums[mid] > target{
right = mid - 1
}else if nums[mid] < target{
left = mid + 1
}else{
return mid
}
}
return -1
}
2、区间左闭右开,right初始化为len(nums),for的条件为left < right,更新right的时候为mid
func search(nums []int, target int) int {
left := 0
right := len(nums)
for left < right{
mid := (right + left) / 2
if nums[mid] > target{
right = mid
}else if nums[mid] < target{
left = mid + 1
}else{
return mid
}
}
return -1
}
LeetCode 27. 移除元素
双指针做法,快慢指针,都初始化为0,快指针负责遍历数组,发现值等于target的话慢指针不动,如果值不等于target的话,让把快指针遍历到的值赋值给慢指针,慢指针+1
func removeElement(nums []int, val int) int {
slow, fast := 0, 0
n := 0
for fast < len(nums){
if nums[fast] != val{
nums[slow] = nums[fast]
slow++
n++
}
fast++
}
return n
}