代码随想录day1 | 704.二分查找 27.移除元素

news2024/11/25 22:29:28

一、二分

1、二分易错点

1、循环变量

while(left < right) 还是while(left <=right)

2、判断条件

if(num[mid] > tar) mid = right 还是 mid = right -1

2、循环不变量

[left, right]
[left, right)
(left, right]

3、左闭右闭写法

当时左闭右闭时,while循环里面的条件,我们可以先假设,有等号即有left=right的情况,例如[1,1]这个区间,那么循环是要进入里面的,所以要取得等号。
在这里插入图片描述
判断的时候,nums[mid]>tar,那么必然tar不在右半区间,所以right=mid-1
在这里插入图片描述
nums[mid]<tar,那么必然tar不在左半区间,所以left=mid+1
在这里插入图片描述

## 模板
left=0
right=size-1
while(left<=right)
{
	int mid=(left+right)/2;
	if(nums[mid]>tar)
	{
		right=mid-1;
	}
	else if(nums[mid]<tar)
	{
		left=mid+1;
	}
	else
	{
		return mid;
	}
}
return -1;

4、左闭右开写法

例如[1,1),既包含1又不包含1,这是个合法的区间吗?所以while(left < right)即可。

判断的时候,因为nums[mid]>tar,所以下一次搜索的时候,区间中mid必然不会在这个左半区间,所以right=mid。
当nums[mid]<tar,因为是左闭右开,明确了tar是大于nums[mid]的,那么下一次搜索的区间的左边界必然是left=mid+1。

right的取值也要注意,因为咱的区间是不包含右边界的,但是还是要包含所有的数字,right相当于变大了1,所以right=size

## 模板
left=0
right=size
while(left<=right)
{
	int mid=(left+right)/2;
	if(nums[mid]>tar)
	{
		right=mid;
	}
	else if(nums[mid]<tar)
	{
		left=mid+1;
	}
	else
	{
		return mid;
	}
}
return -1;

二、题

704.二分查找

class Solution
{
public:
    int search(vector<int> &nums, int tar)
    {
        // 左闭右开
        int left = 0;
        int right = nums.size();
        while (left < right)
        {
            int mid = left + (right - left) / 2;
            if (nums[mid] > tar)
                right = mid;
            else if (nums[mid] < tar)
                left = mid + 1;
            else
                return mid;
        }
        return -1;
    }
};

27.移除元素

删除元素并不是删除,而是覆盖,erase这个操作是O(N)的时间复杂度。
暴力法:O(N2) 的时间复杂度,两层for循环。

// 暴力  n^2 超时了
class Solution
{
public:
    int removeElement(vector<int> &nums, int val)
    {
        int size = nums.size();
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] == val)
            {
                // 将整个剩余的数组,整体移动一位
                for (int j = i + 1; j < nums.size(); j++)
                {
                    nums[j - 1] = nums[j];// 从j -1 开始为了防止越界
                }
                i--;
                size--;
            }
        }
        return size;
    }
};

双指针解法:O(N)
fast快指针:用来获取新数组中的元素,新数组就是不含有目标元素的数组
slow慢指针:用来获取新数组中需要更新的位置

class Solution
{
public:
    int removeElement(vector<int> &nums, int val)
    {
        int fast = 0;
        int slow = 0;
        for (fast = 0; fast < nums.size(); fast++)
        {
        	// 不是我们需要找寻的元素,就更新原数组
            if (nums[fast] != val)
            {
                nums[slow] = nums[fast];
                slow++;
            }
            // 找到 nums[fast]==val 我们就不执行更新操作,而是直接变成fast++
        }
        return slow;
    }
};

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

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

相关文章

2、基于kubeadm搭建K8S环境

目录 一、环境说明 二、初始化所有节点 三、修改三台服务器主机名&#xff0c;并写入host文件 四、调整内核参数 五、所有节点安装Docker 六、所有节点配置K8S源 七、所有节点安装kubeadm&#xff0c;kubelet和kubectl 八、部署 kubernetes Master 节点 九、k8s-node …

基于docker的keepalived+MySQL主从实现MySQL高可用

因生产需要对MySQL做高可用&#xff0c;同时&#xff0c;资源有限&#xff0c;因此采用双节点主从keepalived方式实现高勇。另外因需要大批量部署MySQL集群&#xff0c;需要采用模板化部署&#xff0c;本方案采用将MySQL容器化&#xff0c;实现MySQL模板化配置部署。 部署环境及…

SpringMVC学习笔记--上篇

SpringMVC学习笔记 1、SpringMVC 1.1、什么是SpringMVC Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 1.2、SpringMVC的特点 Spring MVC的特点&#xff1a; 轻量级&#xff0c;简单易学高效 , 基于请求响应的MVC框架与Spring兼容…

Python深度学习-有向图合并、排序、最长路径计算

一、有向图方向、权重表示方法 Python通常使用有向图中边的起点和终点来表示边的方向。例如&#xff0c;如果有一条从节点A到节点B的边&#xff0c;则可以使用以下方式表示该有向边&#xff1a; graph {A: {B: 1} }在这个例子中&#xff0c;节点A和节点B之间存在一条权重为1…

谷歌插件下载Redux DevTools管理Redux数据

我们在做 react-redux开发时 很多时候可能无法确定自己的数据有没有成功导进来 这里就有个不错的谷歌插件推荐给大家 大家可以下载我的资源 谷歌插件Redux DevTools 这里 我们打开 Google Chrome浏览器 然后 直接在谷歌浏览器上访问 chrome://extensions/ 如果你的第一次进入 …

【网络安全】学过编程就是黑客?

我们不可否认的是黑客为我们带来了巨大的财产损失于危机&#xff0c;即使其最初的思想是正确的。 个人主页&#xff1a;【&#x1f60a;许思王】 文章目录 前言黑客 &#x1f4bb;起源&#x1f697;发展&#x1f463;黑客守则&#xff08;真的假的&#x1f914;&#xff09;黑…

合并cyclonedx格式的bom文件

1.工具下载 https://github.com/CycloneDX/cyclonedx-cli/releases 2.操作记录 Usage: cyclonedx [options] [command] Options: --version Show version information -?, -h, --help Show help and usage information Commands: add Add information to a BOM (currently…

【图像处理】:相机对焦的原理和实现方法

相机对焦的原理和实现方法 1 原理介绍&#xff1a;1.1点扩散函数“原理:1.2 测距原理:对焦的本质是测距&#xff1a;1.3.相位检测只原理: 2.实现方法2 1 原理介绍&#xff1a; 对焦有三种思路: 1.1点扩散函数“原理: 也就是观测画面中线条边缘的对比度&#xff0c;对比度最高…

微信小程序代码审核,提示需要添加文娱-其他视频类目

这个解决办法有三个 一个是按照指引去申请资质 第二个是通过后端写一个鉴权接口&#xff0c;审核时候去通过接口返回的布尔值去隐藏掉视频模块&#xff0c;通过后再显示出来 第三个是服务除视频内容外还存在其他形式的情况可以通过引入第三方视频插件来解决&#xff0c;但是…

初识Golang,集简洁与性能与一体的语言

文章目录 一、Go语言介绍二、Go语言特性三、Go语言用途四、开发环境搭建五、建立工作区并创建Go程序六、入口文件基本代码介绍七、go命令介绍7.1 基本命令7.2 build 与 run命令7.3 install命令介绍 八、命名规范8.1 变量规范定义8.2 关键字8.3 保留字8.4 需要注意的问题 道阻且…

AIGC 爆火,浪潮信息要做大模型的数据存储大底座

AIGC 在 2023 年爆火&#xff0c;各类大模型层出不穷&#xff0c;参数动辄达到千亿数量级。这些背后&#xff0c;数据的类型和形式也走向复杂多样。例如大模型会采用到我们真实物理世界中的文字、视觉、音频、3D、雷达、多谱等复杂多样的不同模态信号和数据&#xff0c;数据则又…

【Android复习笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

利用Adobe Acrobat DC实现图片和PDF互相转换

一、图片转PDF 可以实现多张或者单张图片转PDF! 这个需要使用到Adobe Acrobat DC的文件合并功能&#xff0c;因为Adobe Acrobat DC的文件合并&#xff0c;不仅可以合并多个pdf文件&#xff0c;也支持合并图片文件。 如图&#xff0c;直接选中多张图片合成即可&#xff1a; 添…

微服务系列文章之 Redisson实现分布式锁(3)

一、概述 1、技术架构 项目总体技术选型 SpringBoot2.4.5 Maven3.5.4 Redisson3.5.4 lombok(插件)2、加锁方式 该项目支持 自定义注解加锁 和 常规加锁 两种模式 自定义注解加锁 DistributedLock(value"goods", leaseTime5)public String lockDecreaseStock(…

84. 求1+2+…+n

链接&#xff1a; 链接 题目&#xff1a; 求 12…n12…n&#xff0c;要求不能使用乘除法、forfor、whilewhile、ifif、elseelse、switchswitch、casecase 等关键字及条件判断语句 (A?B:C)(A?B:C)。 数据范围 1≤n≤500001≤n≤50000。 样例 输入&#xff1a;10输出&#xff1…

【MySQL】不允许你不会使用组合查询

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0…

ASEMI-1N4007是什么二极管,1N4007是什么类型的二极管

编辑-Z 1N4007是一种常见的二极管&#xff0c;属于快恢复二极管&#xff08;Fast Recovery Diode&#xff09;的一种。它是一种高压、高电流的整流二极管&#xff0c;常用于电源电路中的整流器。1N4007的最大反向电压为1000V&#xff0c;最大正向电流为1A&#xff0c;具有较低…

第十七章 原理篇:Deformable DETR

参考教程&#xff1a; 论文&#xff1a;https://arxiv.org/pdf/2010.04159.pdf 源码&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 文章目录 Deformable ConvDeformable DETR计算量MethodDeformable Attention ModuleDeformAttn计算量Multi-scale Defor…

JVM学习笔记(二)

学习黑马视频&#xff1a;01_什么是jvm_哔哩哔哩_bilibili 一、JVM内存结构 程序计数器 虚拟机栈 本地方法栈 堆 方法区 程序计数器、栈、本地方法栈&#xff0c;都是线程私有的。堆、方法区是线程共享的区域。 1. 虚拟机栈&#xff08;JVM Stacks&#xff09; 1&#xff09…