• NC338 删除升序数组的重复元素


    描述
    给定一个升序排列的的长度为 n 的数组 nums,请你删除一部分这个数组的重复元素(数组元素需要原地改变),让这个数组的中每个数字都严格大于前一个数(第一个数除外),然后返回删除过后该数组的长度。

    数据范围:数组的长度满足 1≤n≤10 ^5
    ,数组中的数满足 1≤val≤10 ^9

    示例1
    输入:[1,2,3,4]
    返回值:4
    [1,2,3,4]
    
    示例2
    输入:[1,3,3,4,4,5]
    返回值:4
    [1,3,4,5]
    说明:
    删除后的数组是 [1,3,4,5] 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    思路:利用LinkedHashSet去重并排序,即可得到最后的长度。
    但是数组没有变动,导致用例不能通过,这里需要将重复的值放到去重后数组的后面就行。因此,通过将重复的值保存进list,最后重新将nums值赋值。(过程相对来说异常繁琐了,来自菜🐕的检讨)

    import java.util.*;
    
    
    public class Solution {
        /**
         * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
         *
         * 
         * @param nums int整型一维数组 
         * @return int整型
         */
        public int reArrangeArray (int[] nums) {
            // write code here
            HashSet<Integer> res = new LinkedHashSet<>();
            ArrayList<Integer> list = new ArrayList<>();
            for(int i = 0; i< nums.length;i++){
                if(res.contains(nums[i])){
                    list.add(nums[i]);
                    continue;
                }
                res.add(nums[i]);  
            }
            ArrayList<Integer> result = new ArrayList<>();
            int[] r = res.stream().mapToInt(Integer::intValue).toArray();
            for(int i = 0;i<r.length;i++){
                nums[i] = r[i];
            }
            for(int i = 0; i<list.size();i++){
                nums[r.length+i] = list.get(i);
            }
            return r.length;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    双指针方法;

    int reArrangeArray(int* nums, int numsLen ) {
        int i = 0, j = 1;
        while(j < numsLen){
            if(nums[i] == nums[j])
                 j++;
             else
                 nums[++i] = nums[j++];
            }
        return i+1;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    R语言顶级期刊配色
    java中的泛型
    Maven系列:第1篇:什么是maven?为什么需要它?
    maven高级
    (一)NIO 基础
    读书笔记-《ON JAVA 中文版》-摘要9[第九章 多态]
    问题排查---应用程序不在接收新请求
    [C题目]力扣142. 环形链表 II
    LeetCode每日一题(2438. Range Product Queries of Powers)
    ranger的只读(read)权限引起的
  • 原文地址:https://blog.csdn.net/weixin_44236424/article/details/127434678