【代码随想录算法训练营打卡day1:LeetCode704.二分查找 LeetCode27.移除元素无标题】

文章讲述了作者在训练营中学习并应用二分查找法解决LeetCode的704题,以及使用双指针解决27题的过程,理解了这两种算法的基本思路和实现代码。作者还提到了KMP算法和字符串哈希等新概念,并决定记录接下来60天的学习成长。
摘要由CSDN通过智能技术生成

       因为题目比较简单,在看完题目的时候大致的做题思路就已经在脑中构思出来了,但是我在算法方面属于小白, 所以我的解题思路基本是基于简单编程的暴力算法。但参加训练营的目的是为了学习算法,在学习后采用了新学习的方法来解题,没进行暴力解法的尝试。  

704.二分查找

题目链接:力扣

二分法的采用需要满足元素不重复和有序排列,题目可以满足上述要求所一采用二分法进行查找,二分法与我以前玩的游戏猜数(一人随机选取1~100之间的数,然后其余人依次随机猜数字,然后根据前一个人猜的数不断缩小范围直到一个人猜出数字)有些相似,不同之处在于前者固定每次猜的数为中间的数,后者则是不固定每次猜的数,总的来说两者思想一样都是不断压缩范围直到找出需要的数字。

基本思路理解后就是范围的确定,有左闭右闭,和左闭右开,两种方法本质上没有区别,只要掌握好二分法原理就能够理解了。

具体代码:

左闭右闭:

class Solution {
    public int search(int[] nums, int target) {
        int l=0,r=nums.length-1;
        int m;
        while(l<=r){
            m=(r+l)/2;
            if(nums[m]<target)
            l=m+1;
            else if(nums[m]>target)
            r=m-1;
            else 
            return m;
        }
        return -1;

    }
}
左闭右开:
class Solution {
    public int search(int[] nums, int target) {
        int l=0,r=nums.length;
        int m;
        while(l<r){
            m=l+(r-l)/2;
            if(nums[m]<target)
            l=m+1;
            else if(nums[m]>target)
            r=m;
            else 
            return m;
        }
        return -1;

    }
}

 27.移除元素

题目链接:力扣

文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

状态:理解双指针并能运用

我的理解来说双指针就是用快慢两个指针到达for循环的作用,但与for循环还是有着本质上的区别只是能到达一样的效果。基本思路就是快慢两个指针初始位于0位置上,当快指针遇到不需要移除的元素,将该元素移动到慢指针停留的位置,然后慢指针前进一个元素,快指针则继续向前重复上述步骤直到快指针遍历数组。

具体代码:

class Solution {
    public int removeElement(int[] nums, int val) {
        int i=0,j=0;
        for(;i<nums.length;i++){
            
            if(nums[i]!=val){
                nums[j++]=nums[i];
            }           
        }
       return j;
    }
    
}

收获与总结

       算法训练营第一天的任务完成了,比我想象中要难一点并不是题目难,而是这种学习方式比我想象的难,但好歹是能学会,之后应该也不会有太大问题。今天收获颇丰学会二分法和双指针的用法,还有就是在阅读每日精华的时候发现了一些我不了解的概念kmp算法和字符串哈希,于是就去看了看简单的了解了一下,虽然还达不到能使用的地步但是基本概念和原理还是能够理解,同时也要感叹一下能想出这些算法的是真是远超于我的存在,不知道自己有没有机会能够到达如此程度。

记录

       今天是参加训练营第一天老实说我并不是一个勤奋的人,假期的时间我多数都用来打游戏了,在学校也是能逃的课都逃了,但即便是我这样懒惰的家伙也会有自己想要去为之奋斗发目标,为了实现它我逼迫自己坚持,我不确定自己能坚持多久所以我想在接下来的60天记录自己的成长与坚持,也希望在后面我没动力时推自己一把。

打卡第一天!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值