`

Remove Duplicate from Array(数组去重)

阅读更多
给定一个数组,判断是否存在重复元素,或者让你找出重复的元素。遇到这类问题我们应该先想用哈希表,位运算,双指针是否可以解决,根据具体的情况选择合适的方法。下面是leetcode中有关数组去重或查重的几道题目。

1,Contains Duplicate
给定一个数组,判断里面是否存在重复元素,如果存在就返回true,如果不存在就返回false.

既然是判断是否存在重复元素,我们首先想到哈希表,遍历数组,存在重复元素直接return true;不重复的元素依次加入表中,直到结束。代码如下:
public class Solution {
    public boolean containsDuplicate(int[] nums) {
        HashMap<Integer, Integer> hm = new HashMap<Integer,Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(hm.containsKey(nums[i])){
                return true;
            } else {
                hm.put(nums[i], i);
            }
        }
        return false;
    }
}


2,Contains Duplicate II
给定一个数组nums[],找出两个相同的元素nums[i] = nums[j], 并且满足(i > j )&& (i - j <=  k)

和上一题目相比,我们只需要再找到相同元素时加一个判断就可以,当i-j <=k 时return true;
代码如下:
public class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(hm.containsKey(nums[i]) && i - hm.get(nums[i]) <= k) {
                return true;
            } else {
                hm.put(nums[i], i);
            }
        }
        return false;
    }
}


3,Remove Duplicates from Sorted Array
给定一个数组,删除重复的元素(in-place),使每个元素最多出现一次,然后返回新的长度。
例如给定数组nums[] = {1,1,2} 返回 2

删除元素,我们往往用两个指针来处理,一个指针用来遍历,一个用来保存处理过的元素。对于这道题,我们用一个指针遍历,当遇到相同的就继续遍历,如果不相同的,我们就把它保存。
代码如下:
public class Solution {
    public int removeDuplicates(int[] nums) {
        int index = 1;
        for(int i = 1; i < nums.length; i++) {
            if(nums[i] != nums[i - 1])
            nums[index++] = nums[i];
        }
        return index;
    }
}


4,Remove Duplicates from Sorted Array II
给定一个数组,删除重复的元素(in-place),使每个元素最多出现两次,然后返回新的长度。

与上一道题不同,它允许每个元素出现两次,基本方法我们还是采用两个指针,但我们要维护一个计数变量,来记录重复元素出现的次数,代码如下:
public class Solution {
    public int removeDuplicates(int[] nums) {
        int index = 0;
		int count = 0;
		for(int i = 0; i < nums.length; i++) {
			if(i > 0 && nums[i] == nums[i-1]) {
			    if(count >= 2) {
			        continue;
			    } else {
			        nums[index++] = nums[i];
			        count ++;
			    }
			} else {
			    nums[index++] = nums[i];
			    count = 1;
			}
        }
        return index;
    }
}


5,Find the Duplicate Number
给定一个数组,长度为n+1,每个元素的值在1...n之间,假设只有一个重复的值,但是这个值可能重复多次,找出这个重复的值。要求空间复杂度为O(1),时间复杂度小于O(n^2)

因为我们知道数组中元素的值,它们在1...n之间,因此我们可以通过标记,来找到重复的元素,例如数组nums = {1,1,2}; 我们从第一个元素开始处理,我们让nums[nums[0]] 的值取负数,这样num[1] 就变为了-1,如果不重复时,我们就访问不到负数,只有重复的元素,我们才能访问到负数。代码如下:
public class Solution {
    public int findDuplicate(int[] nums) {
        int result = 0;
        for(int i = 0; i < nums.length; i++) {
            if(nums[Math.abs(nums[i])] > 0) {
                nums[Math.abs(nums[i])] = -nums[Math.abs(nums[i])];
            } else {
                result = Math.abs(nums[i]);
            }
        }
        return result;
    }
}
分享到:
评论

相关推荐

    Labview去处掉数组重复的元素

    this vi is capble to remove the duplicated elements in the labview array.

    Java数组去重 集合List去重的常用方法总结

    ### Java数组去重与List集合去重的常用方法总结 #### 一、Java数组去重方法 在实际的开发工作中,经常会遇到需要处理数组中重复元素的问题。下面将详细介绍两种常用的数组去重方法。 ##### 方法一:For双循环法 ...

    JavaScript常见的五种数组去重的方式

    Array.prototype.removeDuplicate = function(){ var n = []; for(var i=0; i; i++){ if(n.indexOf(this[i]) == -1){ n.push(this[i]); } } return n; } ``` ### 第二种:基于索引的去重 这种方法也是使用`...

    JS实现数组去重及数组内对象去重功能示例

    随着Web应用日益复杂,开发者经常会遇到需要去重数组和对象的场景,以避免数据冗余和处理效率低下。本文通过实例展示了在JavaScript中如何实现数组和数组内对象的去重功能,并讨论了ES5和ES6两种不同版本的技术实现...

    Duplicate Cleaner Pro 文件去重工具

    《Duplicate Cleaner Pro:高效精准的文件去重利器》 在我们的日常工作中,无论是个人电脑还是企业服务器,都可能面临文件堆积、重复数据占用大量存储空间的问题。这时,一款高效的文件去重工具就显得尤为重要。...

    LeetCode Remove Duplicates from Sorted Array解决方案

    LeetCode 中的 Remove Duplicates from Sorted Array 解决方案是一个经典的算法问题,需要我们使用迭代器遍历数组,删除重复元素,并返回新的长度。通过该解决方案,我们可以学习到使用迭代器遍历数组、删除元素和...

    Python numpy 点数组去重的实例

    在`__main__`部分,有一个简单的测试用例,创建了一个包含重复点的数组`xy`,然后调用`duplicate_removal`函数进行去重,并打印出去重后的结果。 这个方法的优点在于它利用了NumPy的高效计算能力,对于大规模数据集...

    Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库

    Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库 Oracle 11gR2 中使用 RMAN duplicate from active database 复制数据库是一种高效的数据库复制方法。这种方法可以直接从活动数据库复制,省去...

    duplicate-array:复制一个数组

    这个主题,也就是我们所说的“duplicate-array”,涉及到数组的深拷贝和浅拷贝概念,这对于理解JavaScript中的引用类型至关重要。下面我们将深入探讨这个知识点。 首先,我们要知道在JavaScript中,数组是一种特殊...

    Vistanita Duplicate Finder 文件去重

    文件去重是Vistanita Duplicate Finder的核心功能。它通过高级的文件比较算法,如哈希对比,快速识别出内容完全一样的文件,无论这些文件的文件名是否相同。这种方法确保了查找出的重复文件是真正意义上的复制品,而...

    最好用的文件去重Duplicate Cleaner Pro v3.24专业破解版

    文件去重Duplicate Cleaner Pro v3.24专业破解版 Duplicate Cleaner 是一款可以帮助你在你的计算机上找到并且清除副本文件的简单易用的软件。你可以立即搜索多个文件夹结构并且设置识别副本文件的标准。你可以选择...

    删除重复网址*Remove Duplicate URL*去重复url

    删除重复 去重复url 删除重复网址 remove duplicate url 一个国外的删除重复网址软件

    dedup-array:用键名过滤数组中的重复对象

    对象数组去重:过滤对象数组中指定键名的重复值,不会比较其他键值,不会合并。installnpm i dedup-arrayUsagelet filteredArr = dedup(array,["key1","key2"])Demolet dedup = require("dedup-array");let array =...

    Remove Duplicate Lines:删除文本文件中的重复行-开源

    "Remove Duplicate Lines" 是一个针对这个问题的开源软件,它提供了一个图形化的用户界面,使得用户能够轻松地从文本文件中删除重复的行,从而提高工作效率。这个工具对于那些需要处理大量文本数据并确保数据唯一性...

    Remove Duplicate Email-crx插件

    "Remove Duplicate Email-crx插件"是一款专门针对电子邮件营销领域设计的Chrome浏览器扩展程序。它旨在帮助用户在进行电子邮件营销活动时,有效地去除邮箱列表中的重复条目,从而提高工作效率和邮件发送的准确性。 ...

    Get_Duplicate_array​_with_Index:在单元格数组列表中查找重复的值(字符串)-matlab开发

    %%**************************************************** **************************************************** % 名称:Get_Duplicate_array_with_Index %作者:Pruthvi Raj G-KPIT_RNTBCI ::(9677066394 :: ...

    array-duplicate:从两个数组中查找重复项

    $ npm install array-duplicate 用法 var array1 = [ 1 , 2 , 3 ] var array2 = [ 2 , 3 , 4 ] duplicated ( array1 , array2 ) // yeilds [2, 3] 执照 版权所有(c)2015 ,已获得MIT Expat许可。

    Remove-duplicate-fasta:Python脚本删除重复的Fasta序列

    -Python script to remove whole duplicate fasta sequences i.e identical sequence and header -input file must be in fasta format usage: python remove_duplicate_fasta.py inputfile outputfile 例子: ...

Global site tag (gtag.js) - Google Analytics