首页 > 编程语言 >代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

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

时间:2022-11-16 17:23:15浏览次数:44  
标签:medium nums int 随想录 fast 27 移除 left

目录

两道题

704.二分查找

  1、数组算是最简单,也最不抽象的数据结构了。二分法,我也在学习路上听过不少次,所以是实际实现也很快,没有什么问题,谈不上多少收获和疑问。简单贴个代码一闪而过了。
  2、在看评论区的时候,有一个很细,很有心机的收获

medium = left + (right - left) / 2;           //就只是为了防止 int 溢出

所以在写笔记的时候最终代码修改为:

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

27. 移除元素

  第一次写的时候,以为很简单,还自以为是的先用二分法找,然后再把后面的元素覆盖上来。接着运行的时候发现二分法必须是排好序的数组,接着想到还需要排序,果断选择了暴力解法
  第二次就肯定是用更快速高效的方法 --- 双指针 ,如果不知道双指针,我可能是一辈子想不到有这个方法的。

在这里插入图片描述
代码如下:

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

省流

  1、704里的收获:一点小心机
  2、27的图
  3、数组删除元素真正的逻辑 -- 把目标元素后面的一路覆盖上来

标签:medium,nums,int,随想录,fast,27,移除,left
From: https://www.cnblogs.com/Chain-Tian/p/16896613.html

相关文章