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

作者在文中分享了初次接触LeetCode时解二分查找和移除元素问题的思考过程,遇到的困难主要是将思路转化为正确代码,通过查看题解和视频讲解加深了对左闭右闭、左闭右开的理解,并应用双指针解决了移除元素的问题,强调了练习和坚持的重要性。
摘要由CSDN通过智能技术生成

704.二分查找
题目链接:https://leetcode.cn/problems/binary-search/

var search = function(nums, target) {
let left=0
let right=nums.length-1
while(left<=right){
    let mid =Math.floor((right-left)/2)+left
    let num=nums[mid]
    if(target===num){
        return mid
    }else if(target<num){
      right=mid-1
    }else{
        left=mid+1
    }
}
return -1
};

第一想法:

我是初次开始刷Leetcode上面的题目,我看到题目之后的想法是直接拿了草稿纸,先根据题目把大概意思分析分析,我首先想到查找目标值,直接一个for循环,但是我很快推翻了。二分查找更容易一些找。首先我需要定义一个中间值,左边的值和右边的值和某个值所对应的下标值,通过将目标值和数组的中间值所对比来缩小查找范围,改变左边的值或者右边的值即可。这是我的大概思路。

困难:

我发现我能想出大体思路,但是我写出来的东西要么报错,要么就不知道如何去表示我的想法,然后我就去找了题解看代码具体是怎么实现的,看了之后又去尝试写,这次报错的地方很少,但依旧有,不知道如何去改,我又去翻了题解的代码,发现我错的都是一些特别小的粗心的点,我把target===num,直接写成了target=num

反思:

写完之后我去看了卡哥的视频,在此附上视频地址:https://www.bilibili.com/video/BV1fA4y1o715

加深了我对左闭右闭和左闭右开的理解,即就是看是否合法

左闭右闭

eg:[1,1]

发现合法,那么就令left<=right

当num的值大于target的值时,说明target的值一定不包含num,那么接下来的右区间变成了mid-1

左闭右闭区间来说更好理解一点。

27.移除元素

题目链接:https://leetcode.cn/problems/remove-element/

var removeElement = function(nums, val) {
let slow=0
for(let fast=0;fast<nums.length;fast++){
    if(nums[fast]!==val){
        nums[slow]=nums[fast]
        slow++
    }
}
return slow
};

第一想法:

我第一想法是用js中数组去重的方法去做,但是我发现这道题中的数是无序的,思考了一会我不知道如何去下手,就去看了题解,题解也不是很懂,我就去看了视频讲解,卡哥运用了双指针的做法去写。首先需要知道的是快指针对应的是:新数组所需要的元素,即筛选掉等于val的元素,慢指针所指的是新数组的下标值。首先移动快指针,当快指针的值不等于val的值时,将快指针的值赋值给慢指针,然后将慢指针所指的位置再向后移动一位。

困难:

看了视频讲解之后,我去写了代码,依旧是犯的小错误,没有定义快指针,所以一定要注意自己这些手下的小错误,小错误导致代码运行不了,就是大错误。

需要注意的点:

移除数组中的元素,只能覆盖不能删除。

总结:

如果不理解一定要去看题解,题解有疑问就去看视频讲解,不断地去修改代码,不断的加深印象,没事就看看这些回顾回顾,不怕我们不会,只要我们不断去练习,不会的也终将会变成会的,白纸终将写满答案交上我们自己的满意答卷,最重要的是坚持下去,一定要坚持。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第二十二天的算法训练营主要涵盖了Leetcode题目中的三道题目,分别是Leetcode 28 "Find the Index of the First Occurrence in a String",Leetcode 977 "有序数组的平方",和Leetcode 209 "长度最小的子数组"。 首先是Leetcode 28题,题目要求在给定的字符串中找到第一个出现的字符的索引。思路是使用双指针来遍历字符串,一个指向字符串的开头,另一个指向字符串的结尾。通过比较两个指针所指向的字符是否相等来判断是否找到了第一个出现的字符。具体实现的代码如下: ```python def findIndex(self, s: str) -> int: left = 0 right = len(s) - 1 while left <= right: if s[left == s[right]: return left left += 1 right -= 1 return -1 ``` 接下来是Leetcode 977题,题目要求对给定的有序数组中的元素进行平方,并按照非递减的顺序返回结果。这里由于数组已经是有序的,所以可以使用双指针的方法来解决问题。一个指针指向数组的开头,另一个指针指向数组的末尾。通过比较两个指针所指向的元素的绝对值的大小来确定哪个元素的平方应该放在结果数组的末尾。具体实现的代码如下: ```python def sortedSquares(self, nums: List[int]) -> List[int]: left = 0 right = len(nums) - 1 ans = [] while left <= right: if abs(nums[left]) >= abs(nums[right]): ans.append(nums[left ** 2) left += 1 else: ans.append(nums[right ** 2) right -= 1 return ans[::-1] ``` 最后是Leetcode 209题,题目要求在给定的数组中找到长度最小的子数组,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值