用哈希表去数组重复项,有详细注释

这个我不懂,男朋友给我讲了一遍,我还是不太明白,于是自己带入实例一个一个理了一遍,写上了很详细的注释,如果有人能看到,并且和我一样不太理解,希望看到这个就都能懂哈,哎学习中的菜鸟伤不起~

var countArr = [1, 2, 1];
function unique(arr) {
    var resultArr = [],
        hash = {}; //定义返回的数组,和哈希表
    for (var i = 0, elem;
    (elem = arr[i]) != null; i++) {
        //for循环第一句话:定义i=0,和elem两个变量
        //for循环第二句话:把arr[i]的值赋给elem,判断elem的值是否为空
        //①当i=0,第一次循环,elem=arr[0]=1,所以不为null,进入循环内部
        //②当i=1,第二次循环,elem=arr[1]=2,所以不为null,进入循环内部
        //③当i=2,第三次循环,elem=arr[2]=1,所以不为null,进入循环内部
        if (!hash[elem]) {
            //①这时elem=1,if(!hash[1])由于这时hash={},所以hash[1]没有值为false,!hash[1]就为true,执行if内部语句
            //②这时elem=2,if(!hash[2])由于这时hash={1:true},所以hash[2]没有值为false,!hash[2]就为true,执行if内部语句
            //③这时elem=1,if(!hash[1])由于这时hash={1:true,2:true},所以hash[1]有值为true,!hash[1]就为false,不执行if内部语句
            resultArr.push(elem);
            //①resultArr=[1]
            //②resultArr=[1,2]
            //不执行第三次
            hash[elem] = true;
            //①hash={1:true}
            //②hash={1:true,2:true}
            //不执行第三次
        };
    };
    return resultArr;
}
document.write(unique(countArr));
时间: 2024-08-10 02:11:54

用哈希表去数组重复项,有详细注释的相关文章

js去除数组重复项

原文:js去除数组重复项 第一次写,感觉不知道写啥,想了半天决定还是用以前用过的一些东西,看了看就写数组去除重复项算了^_^. 去除数组重复项有很多方法,之前因为用到,看了一下以前搜集的一些代码,进行比较,在这里总结一下,希望能给各位有所帮助,有什么问题,请各位大神不吝指导. 方法一: //两个for循环 Array.prototype.delRepeat1 = function () { var r = new Array(); label: for (var i = 0, n = this.

12 表中删除重复项

以下代码实现了从表中删除重复项的功能,请选择其中空白行应填入的正确代码(D) template<typename T> void removeDuplicates(list<T> &aList) {     T curValue;     list<T>::iterator cur, p;     cur = aList.begin();     while (cur != aList.end())     {         curValue = *cur;

26,27删除数组重复项

目录 26,27删除数组重复项 题目 双指针法 题26解法 题27解法一 题27解法二 26,27删除数组重复项 题目 题目26 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素. 题

算法-利用object的key唯一性删除数组重复项

# 利用object的key唯一性删除数组重复项 # uniq.html <!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8">  <title>Document</title>   <script type="text/javascript">        var arr=[12,34,2

哈希表--扩展数组

pre-situation: 当哈希表变得太满时候.一个选择是扩展数组. java中数组有固定大小.而且不能扩展.编程时.只能另外创建一个更新的更大的数组.然后把旧数组的所有内容插入 新数组当中. 注意: 哈希函数根据数组大小计算给定数据项的位置. 所以这些数据项不能再放在新数组中和原有数组相同的位置上. 因此不能简单地从一个数组向另一个数组拷贝数据. 扩展后的数组容量通常是原来的两倍.实际上.因为数组容量应该是一个质数. 所以新数组要比两倍的容量多一点.

javscript巧用对象特性去掉数组重复项并排序

当有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后运行alert(a[0]),两种情况下的运行结果都是1,这就是说,数据集合既可以用数组表示,也可以用对象表示!但是我们是无法定义一个具有两个相同key值的object,而我们正可以利用这种特性来去掉数组中的重复项. 把数组转成一个js对象 把数组中的值变成对象中的key 把对象还原成数组 //把数组转成一个js对象 function toObj(arr){ var obj = {}; for(var i=

删除有序数组重复项1--Remove Duplicates from Sorted Array

https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space

js快速去除数组重复项

1 function unique1(arr) { 2 var tmp = new Array(); 3 tmp.push(arr[0]); 4 for(var i=0;i<arr.length;i++) 5 { 6 for(var j=0;j<i;j++) 7 { 8 var k=i-1; 9 if(arr[i]==arr[j]) 10 break; 11 else if(j==k) 12 tmp.push(arr[i]); 13 } 14 } 15 return tmp; 16 }

删除数组重复项

1 class Solution { 2 public int removeDuplicates(int[] nums) { 3 int length = nums.length - 1; 4 for (int i = 0; i <= length; i++) { 5 for (int j = i + 1; j <= length; j++) { 6 if (nums[i] == nums[j]) { 7 for (int k = i; k <length ; k++) { 8 nums