当前位置: 首页 > news >正文

LeetCode 面试经典 150_数组/字符串_删除有序数组中的重复项(3_26_C++_简单)

LeetCode 面试经典 150_删除有序数组中的重复项(3_26_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(双指针):
      • 代码实现
        • 代码实现(思路一(双指针)):
        • 以思路一为例进行调试

题目描述:

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

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与
    nums 的大小不重要。
  • 返回 k 。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = […]; // 输入数组
int[] expectedNums = […]; // 长度正确的期望答案

int k = removeDuplicates(nums); // 调用

assert k==expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
如果所有断言都通过,那么您的题解将被 通过

输入输出样例:

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

示例 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 。不需要考虑数组中超出新长度后面的元素。

提示:
1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按 非严格递增 排列

题解:

解题思路:

思路一(双指针):

1、因题目指出非严格递增排列,可以使用指针 k 来记录不同的元素,指针 i 来遍历数组,若当前遍历元素和前一个元素不同则其值复制到 k 位置 k++(k 初始位置为 0),若相同则继续遍历数组元素。
2、复杂度分析:
① 时间复杂度:O(n),变量数组一次。
② 空间复杂度:O(1),使用常熟个空间。

代码实现

代码实现(思路一(双指针)):
class Solution{
public:// 定义函数,返回去重后的数组长度,nums是输入的数组int removeDuplicates(vector<int> &nums){// 初始化k为1,表示去重后的数组的长度int k = 1;// 从第二个元素开始遍历数组for (int i = 1; i < nums.size(); i++){// 如果当前元素与前一个元素不相等,则说明是一个新元素if (nums[i] != nums[i - 1]){// 将新元素放到索引k的位置,并且k递增nums[k++] = nums[i];}}// 返回去重后的数组长度kreturn k;}
};
以思路一为例进行调试
#include<iostream>
#include<vector>
using namespace std;class Solution{
public:// 定义函数,返回去重后的数组长度,nums是输入的数组int removeDuplicates(vector<int> &nums){// 初始化k为1,表示去重后的数组的长度int k = 1;// 从第二个元素开始遍历数组for (int i = 1; i < nums.size(); i++){// 如果当前元素与前一个元素不相等,则说明是一个新元素if (nums[i] != nums[i - 1]){// 将新元素放到索引k的位置,并且k递增nums[k++] = nums[i];}}// 返回去重后的数组长度kreturn k;}
};int main(int argc, char const *argv[])
{vector<int> nums={1,1,2};Solution s;cout<<s.removeDuplicates(nums)<<endl;for(auto const &i:nums){cout<<i<<" ";}return 0;
}

LeetCode 面试经典 150_数组/字符串_删除有序数组中的重复项(3_26)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.dtcms.com/a/299748.html

相关文章:

  • RabbitMQ--消息丢失问题及解决
  • 是德科技 | AI上车后,这条“高速公路”如何畅通?
  • 如何高效合并音视频文件(时间短消耗资源少)(二)
  • 计网-TCP可靠传输
  • 周末小游戏推荐,离线也能畅玩
  • 阿里云对象存储OSS(Object Storage Service)全面解析
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipython’问题
  • 【计算机组成原理】第一章:计算机系统概述
  • GO 从入门到精通
  • STL——vector
  • GO 从入门到精通2
  • MyBatis-Plus 通用 Service
  • J2EE模式---表现层集成模式
  • MyBatis Plus 对数据表常用注解
  • 进阶数据结构:用红黑树实现封装map和set
  • Sql server查询汇总补缺月份
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词评论查询功能实现
  • Android开发中内存泄漏问题治理方案
  • 四通OKI5560SC针式打印机如何复位清零和恢复出厂设置??
  • 昇思学习营-昇思+香橙派+deepseek介绍课程内容及心得
  • Chukonu 阅读笔记
  • Rerank 模型的其中两种路径:BERT 相似度与 CoT 推理
  • 如何应对心事干扰学习工作?
  • 高可用集群KEEPALIVED的详细部署
  • 【CTF-Web】dirsearch寻找download.php进行?path=flag.txt任意文件下载
  • 深入解析命名管道:原理、实现与进程间通信应用
  • 机器学习对中特估股票关键特征选取的应用与研究
  • 【橘子分布式】gRPC(番外篇-监听流)
  • Thinkph6中常用的验证方式实例
  • 【时时三省】(C语言基础)用指向函数的指针作函数参数