博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
删除有序数组中的重复项
阅读量:3957 次
发布时间:2019-05-24

本文共 2411 字,大约阅读时间需要 8 分钟。

难度简单2102收藏分享切换为英文接收动态反馈

给你一个有序数组 nums ,请你 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

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

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。for (int i = 0; i < len; i++) {    print(nums[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 已按升序排列

通过次数713,608提交次数1,321,235

代码:

public static int removeDuplicates2(int[] nums) {                int sum = 1;                if (nums.length == 0) {                        return 0;                } else if (nums.length == 1) {                        return 1;                } else if (nums.length == 2) {                        if (nums[0] != nums[1]) {                                return 2;                        } else {                                return 1;                        }                }                //iIndex < nums.length-1:避免赋值iNextValue时出现下标越界                for (int iIndex = 0; iIndex < nums.length - 1; iIndex++) {                        int iValue = nums[iIndex];                        int iNextValue = nums[iIndex + 1];                        if (iValue >= iNextValue) {                                //当出现 两个相邻的数相同 或者 前一个数>后一个数 的时候:                                //往后边找出下一个更大的数:                                for (int jIndex = iIndex + 2; jIndex < nums.length; jIndex++) {                                        //jIndex
iValue) { nums[iIndex + 1] = nums[jIndex]; sum++; break; } } //当当前的数已经和数组的最后一位数相同了,后边的数就不必要再继续进行了: if (nums[iIndex + 1] >= nums[nums.length - 1]) { break; } } else { sum++; } } return sum; }

转载地址:http://gytzi.baihongyu.com/

你可能感兴趣的文章
校oj10532: 生成字符串(dp,最优状态转移)
查看>>
平衡二叉树(AVL树)
查看>>
优先队列---二叉堆
查看>>
POJ1521---哈夫曼编码,求最优WPL
查看>>
POJ---2010(Moo University - Financial Aid,优先队列)
查看>>
POJ---3662(Telephone Lines,最短路+二分*好题)
查看>>
L2-007. 家庭房产(并查集)
查看>>
L2-016. 愿天下有情人都是失散多年的兄妹(搜索)
查看>>
L2-019. 悄悄关注
查看>>
POJ 3468 A Simple Problemwith Integers(SplayTree入门题)
查看>>
营业额统计 HYSBZ - 1588 (伸展树简单应用)
查看>>
HDU 1890 Robotic Sort(伸展树---反转应用)
查看>>
POJ 3580 SuperMemo(伸展树的几个基本操作)
查看>>
HDU 3487 Play with Chain(伸展树基本操作)
查看>>
线性链表的顺序存储结构基本实现(C++)
查看>>
线性表的链式存储结构基本实现(C++)
查看>>
静态链表的基本实现过程(C++)
查看>>
栈的顺序存储结构基本实现(C++)
查看>>
两个顺序栈共享空间基本实现(C++)
查看>>
栈的链式存储结构基本功能实现(C++)
查看>>