代码随想录算法训练营第一天

代码随想录算法训练营第一天| 数组理论基础

一、随想录链接

代码随想录

二、今日任务

704. 二分查找

遇到的困难

并未遇到明显困难

解题思路

十分常规的二分法,之前有做过这题,花了三分钟成功ac,之前是考虑左闭右闭的写法,代码如下:

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

看完代码随想录后的收获:

1、两个整型相加一定要注意越界问题(项目中曾经吃过大亏,再次警醒自己);
2、使用左闭右开的方法重新做一遍 代码如下:

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

3、简单总结一下我对于二分法的注意重点,如果有兄弟对于这个有意见或者是补充的十分欢迎指导

  • 注意选择区间
  • 在实现代码时要注意代码的判断条件是否符合区间的合法性

27. 移除元素

遇到的困难

见到这种题目就暴力法解决,确实是自身的代码能力十分的薄弱 ,暴力法代码:

class Solution {
    public int removeElement(int[] nums, int val) {
     int length = nums.length;
     for(int i = 0;i < length; i++){
         if(nums[i] == val){
             for(int j = i+1;j < length;j++){
                 nums[j-1] = nums[j];
             }
             i--;
         length--;
         }
         
    }
    return length;
 }
}
解题思路

看完卡尔哥的视频后茅塞顿开,简单总结一下快慢指针的大概用法

  • 快指针在遍历数组的过程中筛选元素
  • 慢指针将符合条件的元素加入到数组当中

附上代码

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

三、今日用时及总结

  1. 从20:18~21:42 包括写相关博客的时间
  2. 暴露出代码量的问题,而且开始的时间比较晚没有完成多余的题目
  3. 快慢指针的应用以及二分法的边界处理是今日的主要收获,明日留出多一点的时间做巩固题目写入明日的博客当中
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值