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

news2024/11/27 15:51:28

LeetCode704.二分查找

链接:(704.二分查找)
题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

题目就叫二分查找,我们自然就知道这道题用二分查找来解决,通过这道题,我们也可以发现使用二分查找的一个条件:**数组有序,且数组中各元素不重复**

 很容易可以写出如下代码:

public int search(int[] nums, int target) {
        if(nums.length==0 || target<nums[0] || target>nums[nums.length-1]){
            return -1;
        }
        int left=0;
        int right=nums.length-1;
        while(left<=right){
            int mid=left+((right-left)>>1);
            if(nums[mid]<target){       //target在mid右边
                left=mid+1;
            }else if(nums[mid]>target){   //target在mid左边
                right=mid-1;
            }else{
                return mid;
            }
        }
        // 没找到
        return -1;
    }

测试用例:
1.target<nums[0]
2.target>nums[nums.length-1]
3.nums[0]<target<nums[nums.length-1]且存在
4.nums[0]<target<nums[nums.length-1]且不存在
5.nums为空

 LeetCode27.移除元素

链接:27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

 

看到这个题目,我脑子里没有啥空间复杂度为O(1)的解法,那就用暴力吧,暴力解法就是两个for循环,如下 

public int removeElement(int[] nums, int val) {
        if(nums.length==0){
            return 0;
        }
        int count=nums.length;
        for(int i=0;i<count;i++){
            if(nums[i]==val){
                count--;
                for(int j=i+1;j<nums.length;j++){
                    nums[j-1]=nums[j];
                }
                i--;
            }
            
        }
        return count;
    }

难道就没更好的解法了吗,我去看了题解,恍然大悟,答案就是双指针,

定义快慢指针

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

代码如下: 

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

测试用例:

1.数组中包含要移除的元素

2.数组中不包含要移除的元素

3.数组中只有要移除的元素

4.数组中没有元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远程服务调用的简单应用,并轻松解决LinkedHashMap无法转成相关实体类的问题

&#x1f3c0;&#xff08;一&#xff09;为啥需要远程服务调用&#xff1f; &#x1f420;知其然还要知其所以然&#xff0c;在我们的生产项目上一般而言会部署多个微服务&#xff0c;每个微服务会负责不同版块的业务工作。如果某个微服务需要借助另外的某些微服务中的接口才能…

尚硅谷甄选

搭建后台管理系统模板 项目初始化 今天来带大家从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提…

tb6612电机驱动与JGB37-520减速直流电机

tb6612电机驱动与JGB37-520减速直流电机 文章目录 tb6612电机驱动与JGB37-520减速直流电机电机驱动模块TB6612TB6612的引脚说明真值表&#xff08;直流电机的驱动状态&#xff09;TB6612的正转反转原理 直流电机原理减速器编码器一、关于编码器的介绍二、编码器的工作原理&…

Linux:DHCP服务

我的DHCP服务器 是 centos7 使用的yum安装DHCP服务&#xff08;如果不会搭建yum库可以查看&#xff09; Linux&#xff1a;rpm查询安装 && yum安装_鲍海超-GNUBHCkalitarro的博客-CSDN博客 我的环境为&#xff1a; 两台centos7一台win10 第一台centos7 为 DHCP服务器…

【Python 私有变量和私有方法】零基础也能轻松掌握的学习路线与参考资料

Python是一种面向对象的编程语言。在Python类中&#xff0c;私有变量和私有方法是常见的概念。私有变量和私有方法是指只能在类内部访问的变量和方法。在本文中&#xff0c;我们将介绍Python私有变量和私有方法的学习路线&#xff0c;并给出参考资料和优秀实践。 学习Python面…

【MySQL数据库 | 第七篇】图形化界面工具DataGrip基础应用教学

目录 前言&#xff1a; DataGrip安装界面&#xff1a; 利用DataGrip创建数据库&#xff1a; 利用DataGrip为数据库创建表&#xff1a; 利用datagrip修改表&#xff1a; 添加元素&#xff1a; 结束&#xff01; 前言&#xff1a; 在之前我们一直接触的是MySQL命令行语句开…

macOS Sonoma 14beta With OpenCore 0.9.3 and winPE双引导分区黑苹果原版镜像

镜像特点&#xff08;原文地址&#xff1a;http://www.imacosx.cn/113888.html&#xff09; 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要…

RL - 强化学习 马尔可夫决策过程 (MDP) 转换 马尔可夫奖励过程 (MRP)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131097165 马尔可夫决策过程&#xff08;Markov Decision Process&#xff0c;MDP&#xff09;和马尔可夫奖励过程&#xff08;Markov R…

FluxMQ 规则引擎 《一》

规则引擎介绍 演示环境 http://demo.fluxmq.com:50000/ 账号&#xff1a;fluxmq密码&#xff1a;fluxmq 简介 FluxMQ Rule Engine (以下简称规则引擎) 用于配置FluxMQ 消息流与设备事件的处理、响应规则。规则引擎不仅提供了清晰、灵活的 “配置式” 的业务集成方案&#xff0…

(二)CSharp-关于内存分配的总结和疑惑(未解决)

同时看了好几本书&#xff0c;对变量的内存分配概念总是稀里糊涂的。所以干脆专门写一篇文章来对C#内存分配进行研究和总结。 1、值类型和引用类型 对值类型&#xff1a; 值类型实例通常存在线程的堆栈里。即所有值类型的非成员数据都放在线程的堆栈里。如果值类型是类的数据…

4.使用Express跨域资源共享(继上一章)

4.5、CORS跨域资源共享 1.接口的跨域问题 刚才编写的GET和POST接口&#xff0c;存在一个很严重的问题&#xff1a;不支持跨域请求。 解决接口跨域问题的方案主要有两种&#xff1a; ①CORS&#xff08;主流的解决方案&#xff0c;推荐使用&#xff09; ②JSONP&#xff08…

Windows软件架构概念

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来聊聊Windows软件架构的概念。 Shaw和Garlan在他们划时代的著作中以如下方式讨论了软件的体系结构&#xff1a;从第一个程序被划分成模块开始&#xff0c;软件系统就有了体系结构。现在&#xff0c…

PostgreSQL部署出现只有超级用户能创建扩展

最近在Windows Server服务器上部署PostgreSQL12遇到了一个问题,部署完成时,任务问题都没有,也可以远程连接。但是在给数据库添加扩展时出现了如下所述的问题: 执行sql命令create extension "uuid-ossp"出现问题如下:create extension “uuid-ossp” 错误: 创建扩…

文心一言 VS 讯飞星火 VS chatgpt (34)-- 算法导论5.3 1题

一、Marceau 教授不同意引理 5.5 证明中使用的循环不变式。他对第1次送代之前循环不变式是否为真提出质疑。他的理由是&#xff0c;我们可以很容易宣称一个空数组不包含0排列。因此一个空的子数组包含一个0排列的概率应是 0&#xff0c;从而第 1次选代之前循环不变式无效。请重…

Python3+Selenium2完整的自动化测试实现之旅(三):Selenium-webdriver提供的元素定位方法

目录 前言 前端技术名词解释 Selenium-webdriver定位元素 一、 通过id定位 二、通过name定位 三、通过class定位 四、 通过tag定位 五、 通过link定位 六、通过partial_link定位 七、 通过Xpath定位 八、通过CSS定位 总结 前言 本篇以实例介绍selenium下的webdriv…

mysql数据库备份文件回复的方法

备份数据表的恢复 前提配置 关闭防火墙 systemctl stop firewalld iptables -F setenforce 0 安装了mysql数据库 以下列库表为例 先有一个数据库mydb&#xff0c;包含两个数据表customer,timestamps; 其中customer数据表包含数据如下&#xff1a; 备份数据表的回复 第一步…

回溯算法之深度优先搜索

目录 放牌 员工的重要性 图像渲染 岛屿的周长 被围绕的区域 岛屿的数量 岛屿的最大面积 电话号码的字母组合 二进制手表 组合总和 活字印刷 N皇后 深度优先搜索&#xff08;Depth First Search&#xff09;------ 一条道走到黑 放牌 假如有编号为1~3的3张扑克牌…

cpython编译与运行

一.配置环境 python 本身不能运行 cpython 的语法&#xff0c;需要 编译 后引用 需要 gcc 编译器 和 cython 编译器 gcc编译器 把 c语言 编译成扩展模块 Cython 编译器是一种源到源的编译器 python 语法编译成 c语法 1.安装gcc 编译器 gcc 编译器可以下载 Visual Studio 或者…

Android系统的启动流程(一):进入Zygote进程的初始化

Android系统的启动流程 概要 本篇文章主要是从Android系统启动电源开始介绍到程序运行到Java框架层并且完成Zygote进程的启动为止。下面先给出一张简单的概要图&#xff0c;本篇文章将会从源码进行分析Android的部分启动流程&#xff0c;这里的源码来自于AndroidCodeSearch,截…

基于RK3588的人工智能边缘计算大算力网关

智能运维系统从下至上分为终端层、边缘层、平台层和应用层&#xff0c;如图 1 所示。终端层 是整个系统的神经末梢&#xff0c;负责现场数据的采集&#xff0c;除摄像机外&#xff0c;还包括各类传感器、控制器 等物联网设备。边缘层汇总各个现场终端送来的非结构化视频数据和…