704 二分查找
- 第一想法:logn的时间复杂度、双指针,一个指针是区间的开头,一个是区间的结束位置 循环条件是 右指针 大于等于左指针,
func search(nums []int, target int) int {
left := 0
right := len(nums)-1
ans := -1
for right >= left{
middle := (right+left)/2
if target == nums[middle]{
ans = middle
return ans
}else if target >nums[middle]{
left = middle+1
}else if target < nums[middle] {
right = middle-1
}
}
return ans
}
- 看完代码随想录之后的想法 :二分法的使用条件:有顺序的数组、无重复元素
应该是两个指针,一个是区间的开头,一个是区间的结束位置,使用中间位置与target目标值进行比较
开闭区间的问题还没搞清楚
- 今日收获,记录一下自己的学习时长:用时30分
27 移除元素
- 第一想法:for循环判断,从开头到数组结尾、如果不等于target目标值的,就len++,等于目标值的就将后面的元素放到前面
- 后来写了一下,觉得应该是使用快指针和慢指针。快指针用来循环整个数组,慢指针用来指定target位置,后续要被不等于target的值替换掉,p++
func removeElement(nums []int, val int) int {
p := 0
for i := 0; i< len(nums); i++{
// if nums[i] == val {
// p = i
// }
if nums[i] != val {
nums[p] = nums[i]
p++
}
}
return p
}
- 看过代码随想录后:快指针:寻找新数组的元素,就是不等于target的值;慢指针:指向新数组的下标
- 收获:一开始没有想到快慢指针,画图了一下就想到了。用时:20分钟