首页 > 其他分享 >26.删除有序数组中的重复项

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

时间:2024-03-25 22:36:07浏览次数:29  
标签:index 26 slow 删除 nums int fast tail 数组

image-20240325210407021

自己写的,双指针,用tail指针指向不重复有序数组的末尾元素,用index指针进行遍历数组,遇到和末尾元素不一样的元素,放到tail+1的位置,然后tail指针加1

class Solution {
    public static int removeDuplicates(int[] nums) {
        int tail = 0;
        int index = 0;
        int max = nums.length;
        while(index < max){
            if(nums[index] != nums[tail]){
                nums[tail+1] = nums[index];
                tail ++;
            }
            index ++;
        }
        return tail+1;  // 数组起始为0,所以+1
    }

    public static void swap(int[] nums, int a, int b){
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }
}

官方题解:

思路一样,代码更好

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;  // 快慢指针
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {  // 相邻的元素不同,即发现新元素
                nums[slow] = nums[fast];  
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
}

标签:index,26,slow,删除,nums,int,fast,tail,数组
From: https://www.cnblogs.com/lmc7/p/18095560

相关文章

  • 普通数组以及数组对象去重的方法
    在JavaScript中,有多种方法可以实现数组去重:使用Set:Set是ES6中新增的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。letarray=[1,2,3,4,4,5,5];letuniqueArray=[...newSet(array)];使用filter:filter()方法创建一个新的数组,新数组中的元素是通......
  • 蓝桥杯算法基础(29)字符串匹配(RabinKarp)(KMP)(前缀树,字典树,trie,后缀数组,高度数组)
     RabinKarpRabinKarpS:ABABABm个P:ABBn个1.朴素算法,挨个匹配2.哈希法hash->滚动哈希c0*31^2+c1*31^1+c2类似于进制的求法求hash值(c0*31+c1)*31+c2hash(p)=o(n)hash(s)=o(m*n)privatestaticvoidmatch(Stringp,Strings){longhash_p=hash(p);......
  • 七 4261. 孤独的照片 (贡献法)
    4261.孤独的照片(贡献法)思路:从左向右统计与当前奶牛左侧连续不同品种的数量left,从右向左统计与当前奶牛右侧连续不同品种的数量right,最终结果就是每头奶牛right+left+left+right。importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){......
  • 六 1262. 鱼塘钓鱼 (多路归并)
    1262.鱼塘钓鱼(多路归并)思路:遍历最远到的鱼塘,同时将截止时间减去路上花的时间,然后多路归并,不考虑具体钓鱼的顺序,每次都调最多的鱼。importjava.util.*;publicclassMain{privatestaticint[]a;privatestaticint[]b;privatestaticint[]c;......
  • 代码随想录第六天: 哈希表(数组+HashSet+HashMap)
    语言:Java参考资料:代码随想录、ChatGPT3.5当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个......
  • JS区分数组和对象的方法
    1.使用Array.isArray()方法:Array.isArray()是一个静态方法,它接受一个参数,如果参数是一个数组,则返回true,否则返回false。这是区分数组和对象的最直接和最准确的方法。constarray=[];constobject={};console.log(Array.isArray(array));//输出:trueconsole.log(Ar......
  • 排序算法练习——最大间距:给定一个未排序的数组,找到排序后相邻元素之间的最大差值
    最大间距:给定一个未排序的数组,找到排序后相邻元素之间的最大差值。解决这个问题可以使用桶排序的思想。具体步骤如下:找到数组中的最大值和最小值。根据数组的长度,将数组划分成一定数量的桶,每个桶存放一定范围内的元素。计算每个桶内元素的最小值和最大值。遍历桶,计算相邻......
  • 排序算法练习——按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺
    按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺序不同的字符串)分组到同一个组中。要按照字符串的异位词分组,可以使用哈希表来将每个字符串排序后作为键,相同键的字符串即为异位词。以下是实现这个算法的Python代码:fromcollectionsimportdefaultdict......
  • 怎么批量删除docker没有使用的镜像 清理磁盘空间
    要批量删除没有使用的Docker镜像并清理磁盘空间,您可以按照以下步骤执行操作:1.查看当前使用的Docker镜像列表,可以使用以下命令:dockerimages2.确认需要删除的镜像是没有被使用的。如果您确定要删除某个镜像,请记录镜像的REPOSITORY和TAG。3.执行以下命令来删除指定镜......
  • 代码随想录 Day3 数组 | LC977 有序数组的平方 & LC209 长度最小的子数组(滑动窗口))
    四、有序数组的平方题目:力扣977:有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[......