704 二分查找
// 二分查找,这两种方法主要是在于有没有选取最后一个元素作为锚点
func search(nums []int, target int) int {
left, right, mid := 0, len(nums), 0
for left < right {
mid = left + (right-left) >> 1
if nums[mid] < target {
left = mid+1
} else if nums[mid] > target {
right = mid
} else {
return mid
}
}
return -1
}
func search(nums []int, target int) int {
left, right, mid := 0, len(nums)-1, 0
for left <= right {
mid = left + (right-left) >> 1
if nums[mid] < target {
left = mid+1
} else if nums[mid] > target {
right = mid-1
} else {
return mid
}
}
return -1
}
27移除元素
这道题也很简单,利用数组特性,移动元素即可
func removeElement(nums []int, val int) int {
// 先记录数组的长度
// 右指针记录最右边的元素
// 左指针从左往右遍历,直到两个指针相遇
// 左指针如果遍历发现到了val
// 与右指针进行元素交换,右指针往左移动一个位置,左指针位置不懂,返回值减1
// 继续循环遍历
l, i, j := len(nums), 0, len(nums)-1
for i <= j { // 解答错误原因1 没考虑相等情况
if nums[i] == val {
nums[i], nums[j] = nums[j], nums[i]
j--
l--
} else {
i++
}
}
return l
}