每日算法之数组(二)

代码随想录-035期-算法训练营【博客笔记汇总表】 阅读详情

题目

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例

输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

题目解析

这也是一道数组简单题,会使用一种常见的解题方法–快慢指针,主要用于一些前后对照的场景,在此题中需要前后对照看是否重复。开始之前首先需要考虑一些边界情况如数组的长度为0,此时新数组也为0。当数组数组的长度大于0时,数组中至少包含一个元素,在删除重复元素之后也至少剩下一个元素,因此nums[0] 保持原状即可,从下标1开始删除重复元素。定义两个指针fast和slow分别为快指针和慢指针,快指针表示遍历数组到达的下标位置,慢指针表示下一个不同元素要填入的下标位置,初始时两个指针都指向下标1。假设数组 \textit{nums}nums 的长度为 nn。将快指针 \textit{fast}fast 依次遍历从 11 到 n-1n−1 的每个位置,对于每个位置,如nums[fast]
!=nums[fast−1],说明nums[fast] 和之前的元素都不同,因此将nums[fast] 的值复制到 nums[slow],然后将slow 的值加1,遍历结束之后,从 nums[0] 到 nums[slow−1] 的每个元素都不相同且包含原数组中的每个不同的元素,因此新的长度即为slow,返回slow 即可。

JAVA
class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        if (n == 0) return 0;

        int slow = 1, fast = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast-1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
}
Python3
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        slow = fast = 1
        while fast < len(nums):
            if nums[fast] != nums[fast-1]:
                nums[slow] = nums[fast]
                slow += 1
            fast += 1
        return slow        
C++
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) return 0;
        
        int slow = 1, fast = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast-1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
};

最后

有兴趣可以关注公众号QStack,回复“Android”即可获得免费的学习资料。

判断指定数据是否存在于指定数组中,一个数组arr是班级里所有的学员的名称,一个数组currentArr是提交了每日反馈的学员名单,请创建一种算法,把未提交每日反馈的学员筛选出来 以下有两个数组,一个数组arr是班级里所有的学员的名称,一个数组currentArr是提交了每日反馈的学员名单,请创建一种算法,把未提交每日反馈的学员筛选出来 var arr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗","王思聪", "张绿", "李德" 阅读详情

相关推荐

PLSQL Developer新手必看:如何避免安装过程中的常见坑

本文为PL/SQL Developer新手提供了详尽的安装与配置避坑指南。从版本选择、注册码使用、汉化包安装到Oracle客户端连接配置,逐一解析常见问题并提供解决方案,帮助开发者快速搭建稳定的PL/SQL开发环境,顺利开启Oracle数据库编程工作。

g9h0i1的博客 654

每日算法(数组与字符串二)

1、利用字符重复出现的次数,

LXYTSOS的专栏 1432

CANoe从入门到精通“保姆级”教程(二)- 堪称全网“最全”系列

CANoe各功能区介绍;

车载控制器AutoSAR软件开发工程师 2万+

【LeetCode 每日一题】1470. 重新排列数组——(解法二) 原地算法

这段代码同样旨在解决将 格式的数组重排为 的问题。与上一个创建新数组的 O(N) 空间解法不同,此版本追求 O(1) 额外空间,通过巧妙的位运算在原数组 上完成 shuffling。该算法的核心思想是:利用整数中未使用的比特位来临时存储需要移动的数字,从而在一个位置上同时保存原始值和目标值的信息。这基于一个重要的前提:题目约束了 的值在 之间。第一步:编码 - 将目标值存入高位第二步:解码 - 从高位恢复目标值返回结果 时空复杂度 设输入数组的总长度为 。 时间复杂度:O(N) 编码循环:第

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1497

python-pptx库中文文档及使用样例

个人使用样例及部分翻译自官方文档,并详细介绍chart的使用

4万+

HOPE:基于强化学习的混合策略路径规划器,适用于多样化停车场景

本文提出了一种混合策略路径规划器(HOPE),用于解决自动停车中的路径规划问题。HOPE结合了强化学习(RL)和Reeds-Shepp(RS)曲线,通过动作掩码机制引导RL智能体的探索,并利用Transformer融合环境感知信息与掩码。该方法在多样且复杂的停车场景中实现了超过97%的成功率,并通过真实实验验证了其泛化能力。此外,本文还提出了基于空间与障碍物分布的停车场景难度分级标准,进一步提升了训练与评估的效率。实验结果表明,HOPE在规划成功率和跨场景泛化能力上均优于传统的基于规则算法和朴素强化学习方法

weixin_42783201的博客 1466

算法题之每日温度

给定一个整数数组,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。

fengshi95的博客 697

OpenFeign, Zuul, Gateway相互不兼容的问题总结

版本 Lib Vresion spring-cloud-starter-gateway 3.1.0 spring-cloud-dependencies 2021.0.0 spring-cloud-starter-netflix-zuul 2.2.6.RELEASE spring-cloud-starter-openfeign 3.1.0 1. Zuul 与OpenFeign 一起使用的问题 错误信息 jav.

Harry的博客 4133

每日一题.设计相邻元素求和服务;暴力算法与哈希表的运用

本题出自,可以说比昨天的那道“每日抑题”简单不少呀,就是代码长一点,同时本题目使用了两种不同的方法,并对每一种用法进行了深度解析。本文全长5000字。

yzxyy_zzb的博客 1069

FANUC机器人_CRX协作机器人的开机和示教器的初始化设置基本步骤(二)

FANUC机器人_CRX协作机器人的开机和示教器的初始化设置基本步骤

Robot_PLC_HMI_Automation 2733

视觉测量实战:C#上位机+OpenCVSharp 实现工业零件尺寸自动检测(精准像素级,工业级可落地)

本次开发的上位机界面遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有控件均为WinForms原生控件,拖拽即可完成布局本次实战完成了C#上位机+OpenCVSharp 工业零件尺寸自动检测系统的完整开发,这套方案是工业视觉测量的标准落地方案,适配95%的规则几何零件的尺寸检测场景,从五金件、塑胶件到电子元件,全覆盖无死角。测量效率提升100倍、精度提升10倍、无人工误差、可适配流水线实时检测。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 851

算法记录 | Day58 单调栈

思路:1.首先,将答案数组ans全部赋值为 0。然后遍历数组每个位置元素。2.如果栈为空,则将当前元素的下标入栈。3.如果栈不为空,且当前数字大于栈顶元素对应数字,则栈顶元素出栈,并计算下标差。4.此时当前元素就是栈顶元素的下一个更高值,将其下标差存入答案数组ans中保存起来,判断栈顶元素。5.直到当前数字小于或等于栈顶元素,则停止出栈,将当前元素下标入栈。6.最后输出答案数组ans。

m0_37634594的博客 462

linux arm64 Debian12移植操作手册

2023年6月10号Debian官方出了debian12 arm64版本的。如果需要完全适配这个系统的话,需要linux6.10版本。应客户的需求,需要在Debian11升级为Debian12版本。

qq_45147279的博客 2169

hot100—72.每日温度

对于温度列表 [73,74,75,71,69,72,76,73],单调栈 stack 的初始状态为空,答案 ans 的初始状态是 [0,0,0,0,0,0,0,0],按照以下步骤更新单调栈和答案,其中单调栈内的元素都是下标,括号内的数字表示下标在温度列表中对应的温度。由于单调栈满足从栈底到栈顶元素对应的温度递减,因此每次有元素进栈时,会将温度更低的元素全部移除,并更新出栈元素对应的等待天数,这样可以确保等待天数一定是最小的。正向遍历温度列表一遍,对于温度列表中的每个下标,最多有一次进栈和出栈的操作。

2302_80434765的博客 783

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

代码随想录算法训练营第五十八天|739. 每日温度、496. 下一个更大元素 I。

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。本题是单调栈的扫盲题,难度不大,很标准的单调栈题。单调栈通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。使用单调栈主要有三个判断条件。

eternaappiness的博客 483

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode每日一题

*进阶:**将matrix的第一行和第一列作为标志数组,然后单独判断第一排和第一列是否有0,有就全部置0,反之不用管。**进阶:**通过用答案数组来存储左边前缀乘积,然后倒叙遍历过程用一个变量存储右倒叙乘积,并改变数组答案。的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组。之中任意元素的全部前缀元素和后缀的乘积都在。,则将其所在行和列的所有元素都设为。请 **不要使用除法,**且在。之外其余各元素的乘积。的矩阵,如果一个元素为。时间复杂度内完成此题。**进阶:**你可以在。

qq_72562538的博客 367

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 350 每日一题 Day 5.

做了几天力扣的每日一题了,觉得还是每题记篇博客比较好,免得做到后面都忘掉,效果反而不如突击的好 今天的是easy难度,十来分钟就过了。 class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { sort(nums1.begin(),nums1.end()); sort(nums2.begin(),n

weixin_45455414的博客 184

算法日记(2024.11.24)

链接:https://leetcode.cn/leetbook/read/queue-stack/genw3/链接:https://leetcode.cn/leetbook/read/queue-stack/kfgtt/输入: temperatures = [73,74,75,71,69,72,76,73]输入: temperatures = [30,40,50,60]输出: [1,1,4,2,1,1,0,0]解释:12 = 4 + 4 + 4。输出: [1,1,1,0]输出: [1,1,0]

HuHuohuo的博客 196

【代码随想录Day58 单调栈 part01】739.每日温度、496.下一个更大元素Ⅰ

【代码】【代码随想录Day58 单调栈 part01】739.每日温度、496.下一个更大元素Ⅰ。

weixin_38550348的博客 389

Day58 | 739. 每日温度 | 496. 下一个更大元素 I

Day58 | 739. 每日温度 | 496. 下一个更大元素 I

weixin_45461051的博客 229

【JAVA】两个数组的交集 II——力扣每日一题(一)(2020.07.13)

目录题目:350. 两个数组的交集 II方法一:简单、暴力(有问题)方法二:哈希表方法三:排序结语 题目:350. 两个数组的交集 II 题目地址(点击直接跳转)https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2

子浩的博客 3224

长期更新的Leetcode每日一题

长期更新的Leetcode每日一题209. 长度最小的子数组 记录自己的学习过程。 209. 长度最小的子数组 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。 20200628 链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum 解法一 暴力求解,时间复杂度n^2 class Solution { public:

fytom1234的博客 414

【代码随想录二刷】Day58-单调栈-Go

代码随想录二刷第58天

weixin_38255385的博客 306

算法-每日一题(DAY11)每日温度

摘要: 题目要求计算每日温度后首次出现更高温度的间隔天数。采用单调栈解法:遍历温度数组,栈保存未找到更高温度的日期索引。当当前温度高于栈顶日期温度时,计算间隔天数并更新结果数组,重复操作直至栈空或温度不高于栈顶。每个日期仅入栈和出栈一次,时间复杂度O(n),空间复杂度O(n)。示例输入[73,74,75,71,69,72,76,73],输出[1,1,4,2,1,1,0,0]。

2302_80957675的博客 2351

每日算法-数组合并

本文系统讲解了Java中数组合并的核心算法,包括无序数组的简单拼接和有序数组的双指针优化方法。文章从思想本质出发,详细分析了两种场景的实现逻辑:无序数组直接复制元素即可,而有序数组则利用双指针法实现高效合并(时间复杂度O(n+m))。针对LeetCode 88题的特殊场景,还介绍了原地合并的后向双指针技巧。通过代码实现和关键说明,帮助开发者掌握从逻辑理解到具体实现的完整链路。

qq_844085127的博客 1738

【Java图解算法】739.每日温度

引言 生活中什么东西大的时候会变小,小的时候变大呢🐶? 答:当然是单调栈

qq_52416556的博客 1522
上一篇: 每日算法之数组(一)
下一篇: 微信小程序开发入门教程(一)
QStack
博客等级 码龄6年 30粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值