代码随想录算法训练营第一天 | 704 二分查找、27移除元素

 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分钟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值