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

news/2024/7/7 21:33:43

704.二分查找

法一:左闭右闭
注意每次当target在nums[mid]左边时,right更新为mid-1;当target在nums[mid]右边时,left更新为mid+1。
另外,不要忘记更新mid。

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int mid = (left+right)/2;
        //搜查区间为闭区间[left,right],因此left = right的时候是有意义的
        while(left <= right){
            if(nums[mid] > target){
                right = mid-1;//因为已经是大于了,所以nums[mid] != target,right移动到mid左边一个位置
                mid = (left+right)/2;
            }else if(nums[mid] < target){
                left = mid + 1;
                mid = (left+right)/2;
            }else{
                return mid;
            }
        }
        return -1;
    }
}

法二:左闭右开(思想上稍微复杂一点)
关键在于右边界为开区间,因此这个右边界的值实际上是取不到的。
if (nums[mid] > target) right 要更新为mid,target要在[left,mid)之间去寻找,实际上已经把mid索引的值排除在外,因此不需要不需要像左闭右闭一样将right更新为mid-1。

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length;//左闭右开,右边指针应该比最后一个索引大1
        int mid = (left+right)/2;
        while(left < right){//左闭右开时left=right是无意义的
            if(nums[mid] > target){
                right = mid;
                mid = (left+right)/2;
            }else if(nums[mid] < target){
                left = mid + 1;//左边为闭区间,需要排除mid
                mid = (left+right)/2;
            }else{
                return mid;
            }
        
        }
        return -1;
    }
}

#27. 移除元素
这道题卡尔哥的一句话让我豁然开朗:
快指针是用来查找哪些数组元素是我们需要的,慢指针是用来保存我们需要的值。
所以快指针应该对整个数组进行遍历,慢指针只有在找到需要的值的时候才会移动一位。

class Solution {
    public int removeElement(int[] nums, int val) {
        int slowIndex = 0;
        int k = 0;
        for(int i = 0;i < nums.length;i++){
            if(nums[i] != val){
                nums[slowIndex] = nums[i];
                slowIndex++;
                k++;//找到一个符合条件的值,k加一
            }else{
                continue;//如果快指针指向的是val,立刻向下一位移动
            }
        }
        return k;
    }
}

http://lihuaxi.xjx100.cn/news/2173535.html

相关文章

Spring Cloud Alibaba 架构-Sentinel熔断降级

Sentinel主要功能 Sentinel 是阿里巴巴开源的一款流量控制、熔断降级组件&#xff0c;它主要用于保护微服务系统。Sentinel 的主要功能包括以下几个方面&#xff1a; 1. 流量控制&#xff08;Flow Control&#xff09;&#xff1a; Sentinel 通过控制并发请求的数量或速率&am…

学习双向链表带哨兵demo

定义 在计算机科学中&#xff0c;链表是数据元素的线性集合&#xff0c;其每个元素都指向下一个元素&#xff0c;元素存储上并不连续。 双向链表&#xff0c;每个元素知道其上一个元素和下一个元素。 以下为示例代码&#xff1a; package com.tfq.arithmetic.linkedlist;imp…

力扣HOT100 - 169. 多数元素

解题思路&#xff1a; 有点类似于Boyer-Moore 投票算法&#xff0c;但更加形象。 class Solution {public int majorityElement(int[] nums) {int winner nums[0];int cnt 1;for (int i 1; i < nums.length; i) {if (winner nums[i]){cnt;} else if (cn…

TS(TypeScript)中Array数组无法调出使用includes方法,显示红色警告

解决方法 打开tsconfig.json文件&#xff0c;添加"lib": ["es7", "dom"]即可。 如下图所示。

HTML静态网页成品作业(HTML+CSS)——动漫熊出没介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…

记一次重定向问题(浏览器安全)解决

近期做单点登陆功能&#xff0c;本身应该是一个很简单的功能&#xff0c;却发生了意向不到的问题…让我们看下&#xff1a; 首先第三方给出的地址需要通过JWT框架获取token拼接后跳转&#xff0c;我这边为了方便首选肯定是考虑用response.sendRedirect(url)&#xff0c;但是做好…

你还不知道宠物空气净化器的五大好处?难怪家里总有异味和猫毛!

养猫是一件非常令人愉快的事情&#xff0c;猫咪的陪伴能带给我们无尽的欢乐。然而&#xff0c;随着时间的推移&#xff0c;许多养猫的朋友会发现一个问题&#xff0c;那就是家中的猫毛和异味问题。其实&#xff0c;解决这些问题的关键就在于选择一款高效的宠物空气净化器。今天…

再次学习History.scrollRestoration

再次学习History.scrollRestoration 之前在react.dev的源代码中了解到了这个HIstory的属性&#xff0c;当时写了一篇笔记来记录我对它的理解&#xff0c;现在看来还是一知半解。所以今天打算重新学习一下这个属性&#xff0c;主要从属性以及所属对象的介绍、使用方法&#xff0…