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

第一章 数组 part01
 今日任务 

数组理论基础,704. 二分查找,27. 移除元素  

 详细布置
 数组理论基础  

文章链接:代码随想录

题目建议: 了解一下数组基础,以及数组的内存空间地址,数组也没那么简单。

 704. 二分查找 

题目建议: 大家能把 704 掌握就可以,35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置 ,如果有时间就去看一下,没时间可以先不看,二刷的时候在看。

先把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

文章讲解:代码随想录

视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

 27. 移除元素

题目建议:  暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。 

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili


        对于这个题,满足数组有序,使用左闭右开写法实现

c/c++代码示例如下:

int search(int* nums, int numsSize, int target) {int l=0,r=numsSize;while (l<r){int mid=l+(r-l)/2;if (nums[mid]==target){return mid;}else if (nums[mid]>target){r=mid;}else l=mid+1;}return -1;
}

时间复杂度O(logn) 空间复杂度O(1)


         显然暴力法就是遍历数组,当nums[i]==val时,从下标i+1开始所有元素前移一位,并将len-1。(补充:i要及时回溯)

代码示例如下:

int removeElement(int* nums, int numsSize, int val) {int len=numsSize;for (int i=0;i<numsSize-1;i++){if (nums[i]==val){for (int j=i+1;j<numsSize;j++){nums[j-1]=nums[j];}len--;i--;}}return len;
}

这个代码中注意i的回溯,若i不回溯,出现连续val就wa了。时间复杂度O(n^2)。

        优化一下可以这样做:(双指针法-左右指针)

初始化左指针i为数组首,右指针j为数组尾。分别用循环来模拟左指针右移,右指针左移:左指针在nums[i]==val时停下,右指针在nums[j]!=val时停下。然后直接用右指针指向元素覆盖左指针指向元素,当左右相错结束循环,左指针一定指向最终数组尾

代码示例如下:

int removeElement(int* nums, int numsSize, int val) {int pl=0,pr=numsSize-1;while (pl<=pr){while (pl<=pr&&nums[pl]!=val){pl++;}while (pl<=pr&&nums[pr]==val){pr--;}if (pl<pr){nums[pl++]=nums[pr--];}}return pl;
}

还有问题:不取等的话,在相遇时结束循环在[]情况时不对

其他录友的方法:

int removeElement(vector<int>& nums, int val) {int k = 0;int n = nums.size();for (int i = 0; i < n; i++) {if (nums[i] != val) {nums[i - k] = nums[i];}else k++;}return n - k;
}
int removeElement(vector<int>& nums, int val) {int size = nums.size();int cnt = 0;for (int i = 0; i < size; i++) {if (nums[i] != val) {nums[cnt++] = nums[i];}}return cnt;
}

还有快慢指针法

// 时间复杂度:O(n)
// 空间复杂度:O(1)
class Solution {
public:int removeElement(vector<int>& nums, int val) {int slowIndex = 0;for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {if (val != nums[fastIndex]) {nums[slowIndex++] = nums[fastIndex];}}return slowIndex;}
};

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

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

相关文章

玩转安卓手机录屏,轻松掌握录屏技巧!

“安卓手机有录屏功能吗&#xff1f;新买了一部安卓手机&#xff0c;因为之前都是在用苹果手机&#xff0c;所以有点不习惯&#xff0c;最近需要用到录屏功能&#xff0c;但怎么都找不到&#xff0c;希望大家教教我&#xff0c;安卓手机怎么录屏&#xff1f;” 在现代社交媒体…

Redis中RDB和AOF

Redis中RDB和AOF 定时间间隔执行数据集的时间快照&#xff0c;把某一时刻数据和妆容以文件的形式写到磁盘上&#xff0c;也就是快照。 配置文件 如果是普通安装方式可以跳过&#xff0c;如果是docker安装&#xff0c;需要到官网下载redis.conf配置文件到本地&#xff0c;地址…

常见HTTP 500错误发生原因及解决办法剖析

​  对于网站运营者来说&#xff0c;提到500内部服务器错误并不陌生。互联网行业对它的称呼有好几种&#xff0c;如“500内部服务器错误”、“HTTP 500 - 内部服务器错误”、“临时错误 (500)”、“内部服务器错误”。尽管叫法不同&#xff0c;但根本问题是相同的。 目前&…

单片机外设矩阵键盘之行列扫描识别原理与示例

单片机外设矩阵键盘之行列扫描识别原理与示例 1.概述 这篇文章介绍单片机通过行列扫描的方式识别矩阵键盘的按键&#xff0c;通过程序执行相应的操作。 2.行列扫描识别原理 2.1.独立按键识别原理 为什么需要矩阵按键 独立按键操作简单&#xff0c;当数量较多时候会占用单片机…

Talk | ACM MM 2023最佳论文,CATR:基于组合依赖和音频查询的视频分割模型

本期为TechBeat人工智能社区第558期线上Talk。 北京时间12月27日(周三)20:00&#xff0c;浙江大学博士生—李可欣的Talk已准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “CATR-基于组合依赖和音频查询的视频分割模型”&#xff0c;介绍了她的团队在基于组…

BDTC2023:CloudberryDB开源创新与实践

中国大数据技术大会&#xff08;BDTC&#xff09;由中国计算机学会&#xff08;CCF&#xff09;创立于2008年&#xff0c;已经成为国内外极具行业实践的专业大数据交流平台。12月22日-24日&#xff0c;第十七届中国大数据技术大会&#xff08;BDTC 2023&#xff09;在广州举行。…

【map】【滑动窗口】【优先队列】LeetCode480滑动窗口中位数

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 map 优先队列 题目 中位数是有序序列最中间的那个数。如果序列的长度是偶数&#xff0c;则没有最中间的数&#xff1b;此时中位数是最中间的两个数的平均数。 例如&#xf…

【日常聊聊】编程语言的未来:趋势、多样性、人工智能融合、教育与生态系统

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 1. 编程语言的发展趋势 1.1 新语言和编程范式的涌现 1.2 影响和挑战 2. 编程语言的多样性 2.1 互操作性和可移…

8.小明和完美序列

题目 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.nextLine();Map<Integer,Intege…

为什么企业需要客户crm系统?

客户CRM提供数据储存&#xff0c;数据调配&#xff0c;数据分析。让传统的人工操作&#xff0c;让系统去完成。企业只需要提供原始数据就行了。举几个栗子&#xff1a; 1、客户资料的集中管理&#xff1a;可以集中存储和管理客户信息&#xff0c;包括联系方式、工商信息&#…

Jupyter Notebook 开启远程登录

Jupyter Notebook可以说是非常好用的小工具&#xff0c;但是不经过配置只能够在本机访问 安装jupyter notebook conda install jupyter notebook 生成默认配置文件 jupyter notebook --generate-config 将会在用户主目录下生成.jupyter文件夹&#xff0c;其中jupyter_noteb…

使用骨传导耳机的危害有哪些?使用骨传导会损伤听力吗?

长时间不正确的使用骨传导耳机可能会出现以下危害&#xff1a; 听力下降&#xff1a;骨传导耳机通常是佩戴在头部的&#xff0c;通过对头部的振动产生声波&#xff0c;能够减轻对耳道部位的损伤。但是佩戴骨传导耳机时需要和头部紧密相贴&#xff0c;有可能会引起头部出现不适…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(12)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识&#xff08;11&#xff09; 1.3 PCI总线的存储器读写总线事务 1.3.3 HOST处理器访问PCI设备 HOST处理器对PCI设备的数据访问主要包含两方面内容&#xff1a;一方面是处理器向PCI…

数据结构学习 Leetcode474 一和零

关键词&#xff1a;动态规划 01背包 一个套路&#xff1a; 01背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要逆序遍历完全背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要正序遍历 目录 题目&#xff1a; 思路&#xff1a; 复杂…

Flink项目实战篇 基于Flink的城市交通监控平台(上)

系列文章目录 Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;上&#xff09; Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;下&#xff09; 文章目录 系列文章目录1. 项目整体介绍1.1 项目架构1.2 项目数据流1.3 项目主要模块 2. 项目数据字典2.1 卡口…

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络&#xff1a;用深度神经网络&#xff0c;来近似Q函数 强化学习介绍离散场景&#xff0c;使用行为价值方法连续场景&#xff0c;使用概率分布方法实时反馈连续场景&#xff1a;使用概率分布 行为价值方法 DQN&#xff08;深度 Q 网络&#xff09; 深度神经网络 Q-L…

【自然语言处理】第3部分:识别文本中的个人身份信息

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

复盘打码功能

最近工作中&#xff0c;需求方提出了一个打印条码的功能&#xff0c;需要将指定样本及其关联实验单的编号全部打印出来。 后端会把我需要的打码入参返回给我&#xff0c;前端需要做的是&#xff1a;引入厂家提供的js文件&#xff0c;调用提供的js方法初始化打印机&#xff0c;从…

k8s二进制部署--部署高可用

连接上文 notready是因为没有网络&#xff0c;因此无法创建pod k8s的CNI网络插件模式 1.pod内部&#xff0c;容器与容器之间的通信。 在同一个pod中的容器共享资源和网络&#xff0c;使用同一个网络命名空间。 2.同一个node节点之内&#xff0c;不同pod之间的通信。 每个pod都…

通过Python将PDF转为文本,快速提取PDF中的文字

快速高效地从PDF文档中提取信息对于专业人士来说非常重要。处理大量PDF文件时&#xff0c;将PDF转换为可编辑的文本格式可以节省时间和精力。而强大的Python语言正是在这些方面发挥其作用。利用Python中丰富的API&#xff0c;我们可以轻松在Python程序中将PDF转换为文本&#x…