Day1
T1 二分查找
分析
~~~~~~ 没啥好说的,就是普通的二分查找,直接上代码
代码
func search(nums []int, target int) int {
l, r := 0, len(nums) - 1
for l < r {
mid := (l + r) / 2
if nums[mid] >= target {
r = mid
} else {
l = mid + 1
}
}
if nums[l] == target {
return l
} else {
return -1
}
}
T2 移除元素
分析
~~~~~~ 只有 O ( 1 ) O(1) O(1)的额外空间,把数组中val的值删除,返回最终数组中的元素。用golang来写十分方便,因为可以用切片。用一个tmp来统计当前有效指针,遇到一个不为val的值,就把它放在当前有效指针的位置,然后指针右移。遇到一个为val的值,就意味着最后数组要少一个元素,统计在cnt里。最后对数组进行cnt次减1的切片。
代码
func removeElement(nums []int, val int) int {
tmp, cnt := 0, 0
for _, num := range nums {
if num != val {
nums[tmp] = num
tmp++
} else {
cnt++
}
}
for i := 0; i < cnt; i++ {
nums = nums[0 : len(nums) - 1]
}
return tmp
}