关于javascript:一个非空的整数列表

a non-empty list of integers

本问题已经有最佳答案,请猛点这里访问。

给您一个非空的整数列表。对于此任务,您应该返回一个仅包含此列表中非唯一元素的列表。为此,需要删除所有唯一元素(仅包含在给定列表中一次的元素)。解决此任务时,不要更改列表的顺序。示例:[1, 2, 3, 1, 3]1和3个非唯一元素,结果为[1, 3, 1, 3]

1
2
3
4
5
6
7
8
9
function nonUniqueElements(data) {
  var array = [];
  for (var i = 0; i < data.length; i++) {
      while (i >= 2) {
         array.push(i);
      }
      return data;
  }
}


我的解决方案:

  • 首先循环数组,计算数组中每个数字的显示量通过使用地图。总时间为O(N)
  • 然后在数组上再次循环并将数字,仅当当前数字在地图中显示超过1时。总时间为O(N)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     function nonUniqueElements(data) {

              //first loop over the array and find all duplications
              //create a map with all the numbers
              //the key will be the number,
              //and the value will be how much each number appears in the array
              var map = {};
              for (var i=0; i < data.length; i++){
                if (map[data[i]] == undefined){
                  //the number does not exist in the map, than push to map
                   map[data[i]] = 0;

                } else {//the number alredy exists
                  //increase the counter
                   map[data[i]] = map[data[i]] +1;
                }
              }


              //now, loop over the array once again
              var nonUniqueArray = [];
                for (var i=0; i < data.length; i++){
                  //if the value of the current element is more than 1
                  if (map[data[i]] > 0){
                    //push to the new nonUniqueArray
                    nonUniqueArray.push(data[i]);
                  }
                }

              //return the  non unique array
              return nonUniqueArray;
            }
  • 希望它有帮助


    对于遍历同一数组的循环(在本例中是数据)使用嵌套。

    首先检查每个循环的索引是否相同。如果什么都不做。如果它们不相同,请检查这些值。如果值相等,则推到数组。