代码随想录算法训练营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://www.mzph.cn/news/581787.shtml

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

相关文章

Jupyter Notebook 开启远程登录

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

查看ios app运行日志

摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极大地简化了开发者的调试…

短说社区运营的使用工具分享(一)

本文是一篇针对短说社区运营的使用工具分享帖&#xff0c;是小编结合日常使用&#xff0c;总结的一些可以帮助网站管理员和运营人员进行日常操作和管理的工具。 1. 想天工作台之运营面板 想天工作台可以将桌面划分不同的类型来辅助办公&#xff0c;我分享下我当前的桌面情况&…

基于Mbed Studio环境下开发STM32

基于Mbed Studio环境下开发STM32 &#x1f4cd;Mbed官网&#xff1a;https://os.mbed.com/ ✨mbed OS是ARM出的一个免费开源的&#xff0c;面向物联网的操作系统。提供了一个定义良好的API来开发C应用程序&#xff1b;集成度很高&#xff0c;类似Arduino&#xff0c;目前并不兼…

新兴品牌如何做好传播?媒介盒子分享三招

很多品牌抓住了品类和流量红利&#xff0c;给自己做了传播&#xff0c;但是红利是有时效的&#xff0c;流量越来越贵&#xff0c;竞争对手你追我赶&#xff0c;只有真正占领用户心智&#xff0c;才能获取长期利润。今天媒介盒子就来和大家聊聊&#xff1a;新兴品牌如何做好传播…

用katalon解决接口/自动化测试拦路虎--参数化

不管是做接口测试还是做自动化测试&#xff0c;参数化肯定是一个绕不过去的坎。 因为我们要考虑到多个接口都使用相同参数的问题。所以&#xff0c;本文将讲述一下katalon是如何进行参数化的。 全局变量 右侧菜单栏中打开profile&#xff0c;点击default&#xff0c;打开之后…

[spark] SaveMode

https://spark.apache.org/docs/latest/api/java/index.html?org/apache/spark/sql/SaveMode.html Overwrite 覆盖模式是指将DataFrame保存到数据源时&#xff0c;如果数据/表已经存在&#xff0c;则现有数据将被DataFrame的内容覆盖。 注意: Overwrite 模式会覆盖已存在的表…

室内设计师效果图云渲染好?还是本地渲染好?

室内设计师在设计项目中经常面临一个关键的技术选择&#xff1a;使用云渲染服务或本地渲染完成效果图渲染呢&#xff1f;每种方式都有其独的优势与不足&#xff0c;且影响整个设计的完成速度、质量和成本。当然还有部分人群不知道云渲染是什么&#xff1f;本文整理关于云渲染的…

完全背包问题,原理剖析,公式推导,OJ详解

文章目录 前言一、完全背包的状态设计1、状态设计2、状态转移方程3、对比0/1背包问题4、时间复杂度分析 二、完全背包问题的优化1、时间复杂度优化2、空间复杂度优化 三、OJ练习裸题完全背包离散化最小值 前言 完全背包问题&#xff0c;相比0/1背包问题&#xff0c;实就每个物品…

upset 绘制

好久没有更新,今天来一个upset图的绘制 1.1 安装包 #绘制upset的包现在看来有三个 ## UpSet ### 最基本的upsetR包,使用方便,但是扩展不方便 devtools::install_github("hms-dbmi/UpSetR") ## complex-upset ### UpSet的升级款 支持ggplot2 devtools::install_git…

码住!8个小众宝藏的开发者学习类网站

1、simplilearn simplilearn是全球排名第一的在线学习网站&#xff0c;它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供&#xff0c;其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、VisuAlgo VisuAlgo是一个免费的在线学习算法和数…

c++环形缓冲区学习

C环形缓冲区设计与实现&#xff1a;从原理到应用的全方位解析 - 知乎 这里插入一个回调函数的学习&#xff1a; C回调函数详解_c 回调函数-CSDN博客 【C】C回调函数基本用法&#xff08;详细讲解&#xff09;_c 回调函数-CSDN博客

微软为 Android 用户推出了人工智能助手 Copilot 应用程序

微软为 Android 用户推出了人工智能助手 Copilot 应用程序 - 与 ChatGPT 类似&#xff0c;它包括聊天机器人功能和 DALL-E 3 图像生成 - 该应用程序包括免费访问 OpenAI 的 GPT-4 模型&#xff0c;这是 ChatGPT 中的付费功能 - 发布微软将 Bing Chat 更名为 Copilot 您是否尝试…

Nature Perspective | LLMs 作为角色扮演引擎

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着对话智能体的表现越来越像人&#xff0c;我们必须开发出有效的方法&#xff0c;在不陷入拟人化陷阱的情况下&#xff0c;用高层次的术语描述它们的…

ARP协议分析实验

实验目的&#xff1a; &#xff08;1&#xff09;理解ARP协议的作用&#xff1b; &#xff08;2&#xff09;理解ARP协议的工作方式。 实验器材&#xff1a; Cisco packet 实验内容&#xff1a; 实验步骤&#xff1a; 布置拓扑&#xff1a; &#xff08;2&#xff09;实验…

【Android】使用android studio查看内置数据库信息

背景 需要用到android db 逻辑存储用户信息等等。 使用 在 App inspection 工具中查看该 app 内的 db 数据 sql执行 在新的查询框内解析查询即可知道当前的数据信息。 官方文档-使用 Database Inspector 调试数据库

3DV 2024 Oral | SlimmeRF:可动态压缩辐射场,实现模型大小和建模精度的灵活权衡

目前大多数NeRF模型要么通过使用大型模型来实现高精度&#xff0c;要么通过牺牲精度来节省内存资源。这使得任何单一模型的适用范围受到局限&#xff0c;因为高精度模型可能无法适应低内存设备&#xff0c;而内存高效模型可能无法满足高质量要求。为此&#xff0c;本文研究者提…

计算机基础

前言 本文围绕计算机的发展以及计算机中信息的表示形式对计算机进行简述。 一.何为计算机&#xff08;Computer&#xff09; 在剑桥词典中&#xff0c;关于computer的词条是如此解释的&#xff1a; 一种电子机器&#xff0c;用于存储、组织和查找单词、数字和图片&#xff0…

Flink1.17实战教程(第三篇:时间和窗口)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

关于“Python”的核心知识点整理大全47

目录 16.1.10 错误检查 highs_lows.py highs_lows.py 16.2 制作世界人口地图&#xff1a;JSON 格式 16.2.1 下载世界人口数据 16.2.2 提取相关的数据 population_data.json world_population.py 16.2.3 将字符串转换为数字值 world_population.py 2world_population…