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

本文介绍了二分查找在编程中的应用,强调了左闭右闭区间的重要性,并对比了暴力循环和双指针(快慢指针)在移除元素问题上的优化方法。LeetCode作为技术面试平台,这些技巧有助于提升编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 704. 二分查找

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/binary-search/

二分查找主要是写的时候要注意是左闭右闭区间,还是左闭右开区间,需要注意下这个区别

很好理解,

1、使用0到n-1个所有的位置的元素比较,所以 left=0,right=n-1;

2、是种左闭右闭的写法,[left,right] 一定是需要 最后可能相遇的,要不然会漏元素,所以left<=right;

3、因为middle已经比较过了,所以下一次的区间一定是避开middle的

所以 left=middle+1;

or

right=middle-1;

完成!!!

27.移除元素

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/remove-element/

暴力写法,使劲循环就完了!

public int removeElement(int[] nums, int val) {
        int res = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == val) {
                for (int j = i+1; j < nums.length; j++) {
                    if (nums[j] != val) {
                        int temp = nums[j];
                        nums[j] = nums[i];
                        nums[i] = temp;
                        res++;
                        break;
                    }
                }
            }else{
                res++;
            } 
        }

        return res;
    }

双指针

双指针,快慢指针,其实就是慢指针停留在命中元素的位置,快指针快一步把后面的元素移过来,也不会改变数组中元素的相对位置!

不需要swap,因为后置元素被舍弃了,直接把不等于val的快元素的值搬到前面去。

public int removeElement(int[] nums, int val) {
        int left = 0;
        int n = nums.length;

        for (int right = 0; right < n; right++) {
            if(nums[right]!=val){
                nums[left]=nums[right];
                left++;
            }
        }

        return left;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值