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

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

一、随想录链接

代码随想录

二、今日任务

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. 快慢指针的应用以及二分法的边界处理是今日的主要收获,明日留出多一点的时间做巩固题目写入明日的博客当中

你可能感兴趣的:(算法,编辑器)