删除数组条目中重复的条目(可能有多个),返回值是一个仅包含被删除的重复条目的新数组。

今日在bluediea看到淘宝在线招聘,相信淘宝的技术还是很牛的,于是赶紧打开看看题目并试着做做。
到了第三题时卡了偶老半天,并不是做不出来,感觉有很简便的方法但自己就是一时想不出来,不过费了九牛二虎之力终于完成本题,给出了一个另自己还比较满意的答案,欢迎各位朋友指点!

题目如下:
请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个仅包含被删除的重复条目的新数组。

0;i--){
//如果该项还没有重复项
if(!tempArr[this[i-1]]){
tempArr[this[i-1]]=1; //通过关联数组方式标志该项并置为1(代表出现一次)
}else{
if(tempArr[this[i-1]]++==1)tempArr1[j++]=this[i-1]; //如果第一次重复则将该重复项保存,并将重复标志+1
this.splice(i-1,1); //从原数组删除该项(因为是倒序遍历,所以可以直接在此删除)
}
}
return tempArr1; //返回重复项列表
}
var a=new Array(5,410,52,",",24,5,",",true,false,24,24,25,5)
alert("原数组:"+a);
alert("重复项:"+a.delRepeat());
alert("剩余项:"+a);
//-->

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

代码如下:

Array.prototype.delRepeat=function() 
  { 
        var tmpArr=[],rs=[],i,val; 
        for(i=this.length;i>0;i--) 
    { 
            val = this[i-1]; 
      if(!tmpArr[val]) 
      { 
                tmpArr[val]=1; 
            }else 
      { 
                rs.push(val); 
          this.splice(i-1,1); 
            } 
        } 
    tmpArr = null; 
        return rs; 
    }

两个优点:
1、预先将this[i-1]保存在变量val中,减少访问次数。
2、使用array.push方法,替换用变量保存数组长度的办法。

很好!赞一个!
偶还顺便实现了对返回重复项的过滤,可能是对题意理解有偏差。

(0)

相关推荐

  • php array_flip() 删除数组重复元素

    方法如下: $arr = array(----) ;//假设有一万个元素的数组,里面有重复的元素. $arr = array_flip(array_flip($arr)); //这样便可以删除重复元素. 究竟是怎么回事呢?来看下array_flip()的作用:array_flip()用于将一个数组的每个元素的键和值交换,如: $arr1 = array ("age" => 30, "name" => "快乐园"); $arr2 = a

  • php 删除数组元素

    如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的条目. 删除数组中为空值的元素就可以使用这个函数. 复制代码 代码如下: //删除数组中的一个元素 function array_remove_value(&$arr, $var){ foreach ($arr as $key => $value) { if (is_array($value)) { array_remove_value($arr[$key], $var); }

  • PHP删除数组中的特定元素的代码

    比如下面的程序: 复制代码 代码如下: <?php $arr = array('apple','banana','cat','dog'); unset($arr[2]); print_r($arr); ?> 程序运行结果: 复制代码 代码如下: Array ( [0] => apple [1] => banana [3] => dog ) 但是这种方法的最大缺点是没有重建数组索引,就是说,数组的第三个元素没了. 经过查资料后,原来PHP提供了这个功能,只不过很间接.这个函数是

  • 删除数组元素实用的PHP数组函数

    /** * 从数组中删除空白的元素(包括只有空白字符的元素) * * @param array $arr * @param boolean $trim */ 复制代码 代码如下: function array_remove_empty(& $arr, $trim = true) { foreach ($arr as $key => $value) { if (is_array($value)) { array_remove_empty($arr[$key]); } else { $value

  • php数组函数序列之array_pop() - 删除数组中的最后一个元素

    array_pop()定义和用法 array_pop() 函数删除数组中的最后一个元素. 语法 array_pop(array)参数 描述 array 必需.规定输入的数组参数. 例子 复制代码 代码如下: <?php $a=array("Dog","Cat","Horse"); array_pop($a); print_r($a); ?> 输出: Array ( [0] => Dog [1] => Cat )

  • 删除数组条目中重复的条目(可能有多个),返回值是一个仅包含被删除的重复条目的新数组。

    今日在bluediea看到淘宝在线招聘,相信淘宝的技术还是很牛的,于是赶紧打开看看题目并试着做做. 到了第三题时卡了偶老半天,并不是做不出来,感觉有很简便的方法但自己就是一时想不出来,不过费了九牛二虎之力终于完成本题,给出了一个另自己还比较满意的答案,欢迎各位朋友指点! 题目如下: 请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个仅包含被删除的重复条目的新数组. 0;i--){ //如果该项还没有重复项 if(!tempArr[this[i-

  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    最近写了几个非常简单的接口(CRUD),在单元测试的时候却出了问题,报错如下: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageListener': Unsatisfied dependency expressed through field 'reviewCheckInfoService'; nested exce

  • Opencv中的cv2.calcHist()函数的作用及返回值说明

    目录 cv2.calcHist()函数 cv2.calcHist()函数的作用 cv2.calcHist()函数的返回值 在讨论其返回值前,我们先来介绍以下calcHist()函数的用法: cv2.calcHist()函数 cv2.calcHist()函数的作用 通过直方图可以很好的对整幅图像的灰度分布有一个整体的了解,直方图的x轴是灰度值(0~255),y轴是图片中具有同一个灰度值的点的数目. 而calcHist()函数则可以帮助我们统计一幅图像的直方图 cv2.calcHist(images

  • android webview中使用Java调用JavaScript方法并获取返回值

    在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参. 网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下: Java: 复制代码 代码如下: protected void onCreate(Bundle savedInstanceState) { ........ x = (WebView)this.findViewById(R.id.webView_viewTable); x.setScrollBarStyle(View.SC

  • golang数组和切片作为参数和返回值的实现

    目录 1. 数组作为参数和返回值时 1.1数组的定义 1.2数组作为参数和返回值的时候 2.切片作为参数和返回值 2.1 切片的定义初始化 2.2 切片的存储大致分为3部分 2.3 切片作为参数和返回值 2.4 append 切片动态增长的原理 2.5 copy 函数 通过赋值切片可以使得两个切片的数据不共享 3. 总结: 1. 数组作为参数和返回值时 1.1数组的定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型.字符串或者自定义类型 var

  • 详解C++ 运算符重载中返回值的坑

    相信不少朋友在学习运算符重载的时候,都会被参数与返回值应该是左值引用,还是右值引用,还是const常量所困扰.当然我无法一一枚举,这次先讲一下返回值的坑 (没错就是我亲手写的bug) E0334 "Myclass" 没有适当的复制构造函数 其实这个问题的根源是,没有定义常量参数类型的拷贝构造函数所致 先来看看代码 //头文件head.h class Myclass { private: int a; public: Myclass(int b=0):a(b) {} //构造函数 Myc

  • C++中cin>>n的返回值

    目录 cin>>n的返回值 cin>>n作为判断条件返回的是什么值呢? scanf和cin的返回值问题 scanf cin 小结一下 cin>>n的返回值 #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int n,temp; vector<int> arr; while(cin>>

  • 用python删除文件夹中的重复图片(图片去重)

    第一部分:判断两张图片是否相同 要查找重复的图片,必然绕不开判断两张图片是否相同.判断两张图片简单呀!图片可以看成数组,比较两个数组是否相等不就行了.但是这样做太过简单粗暴,因为两个数组的每个元素都要一一比较,效率很低.为了尽量避免两个庞大的数组比较: 先进行两张图片的大小(byte)比较,若大小不相同,则两张图片不相同: 在两张图片的大小相同的前提下,进行两张图片的尺寸(长和宽)比较,若尺寸不相同,则两张不相同: 在两张图片的尺寸相同的前提下,进行两张图片的内容(即数组元素)比较,若内容不相同

  • Javscript删除数组中指定元素并返回新数组

    把数组中某个值删除,并返回新数组,需要遍历旧数组找到要删除的元素 复制代码 代码如下: /* * 删除数组中指定值 */ Array.prototype.remove=function(value){ var len = this.length; for(var i=0,n=0;i<len;i++){//把出了要删除的元素赋值给新数组 if(this[i]!=value){ this[n++]=this[i]; }else{ console.log(i);//测试所用 } } this.leng

  • Java实现删除排序链表中的重复元素的方法

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */

随机推荐