【刷题】删除排序数组中的重复项

简介: 【刷题】删除排序数组中的重复项

题目描述


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


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


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


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


判题标准:


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


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

 

提示:

0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按 升序 排列

解题思路


  1. 重点是升序数组,这个前置条件很大程序上降低了这道题的难度
  2. 既然是升序数组,那么暴力解法就是每个元素都和它的后一个元素比较
  3. 如果不一样就继续向后比较
  4. 如果一样就说明重复,就把重复的元素裁剪掉,再继续向后比较


AC代码


func removeDuplicates(nums []int) int {
    //考虑到数组长度为0的情况,第一次运行没考虑到,报错了
    if len(nums) == 0 {
        return 0
    }
    ret := 1
    for i:=0;i<len(nums)-1;{
        //如果相等则说明是重复值
        if nums[i+1] == nums[i]{
            //利用go语言append()的特性,裁掉重复值,把重复值之后的各个元素追加到切片尾部 
            nums = append(nums[:i], nums[i+1:]...)
            continue
        }
        i++
        ret++
    }
    return ret
}


运行结果


微信图片_20221112151411.jpg


总结


我的解法用到了go语言中append()追加元素的知识点,也用到了切片裁剪的知识点。

相关文章
|
9月前
基于VisualGLM-6B大模型的本地部署与推理
本文是基于清华开源的VisualGLM-6B 支持图像中英文的多模态对话语言模型,进行了一系列本地的简单部署,包括环境配置、模型部署、演示推理、模型微调(官方提供的代码),由于个人电脑显存不足,最后是在阿里云服务器交互式平台DSW终端进行微调和训练操作的。
301 17
|
8月前
|
数据可视化 项目管理 UED
如何进行有效的优先级管理:6大模型解析
优先级管理看似简单,但要真正做到高效、精准,却需要方法和技巧的支撑。3分钟了解6种优先级管理方法。
531 0
如何进行有效的优先级管理:6大模型解析
阿里云配置dcoker镜像仓库
阿里云配置dcoker镜像仓库
421 0
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
136 0
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的互联网专家服务平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的互联网专家服务平台附带文章源码部署视频讲解等
104 1
|
存储 安全 Java
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
209 1
|
Java 大数据 测试技术
day1:认识Java
【7月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
99 7
|
JavaScript
【Vue Error】 error Component name “product“ should always be multi-word vue/multi-word-compone……
【Vue Error】 error Component name “product“ should always be multi-word vue/multi-word-compone……
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
云安全 存储 人工智能
中国企业出海首选!阿里云荣获BSI数字信任钛金奖
中国企业出海首选!阿里云荣获BSI数字信任钛金奖
232 0