zoukankan      html  css  js  c++  java
  • 面试题——4种数组去重的方法

    数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。

    废话不多说,下面来说说下面我整理的4中数组去重的方法

    方法一: findInArr方法+select方法组合

      findInArr : 查找一个数在当前数组中是否存在,存在返回true,找完所有没有找到,返回false,这个数就是我们要操作的那个数组

      select      :循环数组,并调用findInArr方法 查找当前arr[i]在arr2中是否存在,如果返回false 那么就把当前这个数 arr[i] ,push到新的数组 arr2中,最后return arr2

     1 function findInArr(n ,arr){
     2     for (var i = 0; i < arr.length; i++) {
     3         if (n == arr[i]) {
     4             return true;
     5         }
     6     }
     7     return false;
     8 }
     9 function select (arr){
    10     var arr2 = [];
    11     for(var i = 0; i < arr.length; i++){
    12         if (!findInArr(arr[i],arr2)) {
    13             arr2.push(arr[i]);
    14         }
    15     }
    16     return arr2;
    17 }
    View Code

    方法二 :利用json特性 

      创建一个空的json,通过对key的检索,---> !json[arr[i]],取反说明不存在

      这样我们可以对其进行赋值,json[arr[i]] = true;  对于 赋什么值,随意,保证它的键值对就行

      并且把当前这个数push 或者其他方式都行 ,总是添加到新数组 arr2中,最后return arr2

     1 function select (arr){
     2     var json = {};
     3     var arr2 = [];
     4     for (var i = 0; i < arr.length; i++) {
     5         if (!json[arr[i]]) {
     6             json[arr[i]] = true;
     7             arr2.push(arr[i])
     8         }
     9     }
    10     return arr2;
    11 }
    View Code

    方法三: 相邻数比较法,这个方法前提是先用sort 进行简单排序,不需要改进版的

      经过sort排序之后,我们不论它排序是否正确,但是有一点我们能确定,那就是相同的一定被排到了一起

      那么我们对排序之后的数组遍历,并且让当前的数和下一个数进行比较,如果相等那么用splice(i,1) 方法对其进行删除,这时候i的值需要 i--,避免它少比一次,最后return arr;

     1 function select(arr){
     2     arr.sort();
     3     for (var i = 0; i < arr.length; i++) {
     4         if (arr[i] == arr[i+1]) {
     5             arr.splice(i,1)
     6             i--;
     7         }
     8     }
     9     return arr;
    10 }
    View Code

    方法四:使用数组的indexOf方法 (IE8--不兼容)

      通过判断arr2.indexOf(arr[i]) == -1 ,来确定新数组arr2中没有arr[i],并将其添加到数组arr2中,最终返回 arr2

    1 function select (arr){
    2     var arr2 = [];
    3     for( var i = 0; i < arr.length; i++){
    4         if (arr2.indexOf(arr[i]) == -1) {
    5             arr2.push(arr[i])
    6         }
    7     }
    8     return arr2;
    9 }
    View Code

      上述四中方法肯定存在的性能的差异,可以从速度上,所占内存等进行比较,我没有测过所以就不妄加定论。希望测过的朋友,能告知 。谢谢

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/NTWang/p/6246621.html
Copyright © 2011-2022 走看看