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的值时,将快指针的值赋值给慢指针,然后将慢指针所指的位置再向后移动一位。
困难:
看了视频讲解之后,我去写了代码,依旧是犯的小错误,没有定义快指针,所以一定要注意自己这些手下的小错误,小错误导致代码运行不了,就是大错误。
需要注意的点:
移除数组中的元素,只能覆盖不能删除。
总结:
如果不理解一定要去看题解,题解有疑问就去看视频讲解,不断地去修改代码,不断的加深印象,没事就看看这些回顾回顾,不怕我们不会,只要我们不断去练习,不会的也终将会变成会的,白纸终将写满答案交上我们自己的满意答卷,最重要的是坚持下去,一定要坚持。