• 删除有序数组中的重复项


    26. 删除有序数组中的重复项


     

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

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

    说明:

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

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

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

    示例 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 已按升序排列
    • 来源:力扣(LeetCode)
      链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
      著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    思路分析:

        解本题的思路就在于,怎么将重复元素放到数组尾

          一开始思路选择了冒泡排序,将重复的元素往后挪,但是发现每次只能移动一位,而当某个元素并排出现多个,就无法有效的进行冒泡排序,甚至元素多起来的时候出现超时

    在观看了题解之后,双指针解法:  i用来等待新元素     j用来寻找新元素

          用i记录当前curNums,用j记录下一个nums[j]

          在遇到相同元素的时候,j移动,但是i不移动

          直到遇到了不同的元素,i移动,并且将j遇到的不同元素赋在i指针指向的当前元素下,j继续寻找不同的元素


    代码如下:

    class Solution {
        public int removeDuplicates(int[] nums) {
    		     // 使用双指针
            if(nums==null || nums.length == 1){
                return nums.length;
            }
            int i = 0,j =1;
            while(j<nums.length){
                if(nums[i]==nums[j]){
                    j++;
                }else{
                    i++;
                    nums[i]=nums[j];
                    j++;
                }
            }
            return i+1;
        }
    }
    

      


    测试结果:

  • 相关阅读:
    手机端上传图片及java后台接收和ajaxForm提交
    JEECG中datagrid方法自定义查询条件
    微信分享到朋友圈按钮 右上角提示
    Js获取后台集合List的值和下标的方法
    redis系列之数据库与缓存数据一致性解决方案
    替换{0}为指定的字符串(MessageFormat)
    java中对array数组的常用操作
    面试题-Java Web-网络通信
    你应该知道的JAVA面试题
    各大互联网公司java开发面试常问问题
  • 原文地址:https://www.cnblogs.com/wuyiyuan/p/15246538.html
Copyright © 2020-2023  润新知