a non-empty list of integers
本问题已经有最佳答案,请猛点这里访问。
给您一个非空的整数列表。对于此任务,您应该返回一个仅包含此列表中非唯一元素的列表。为此,需要删除所有唯一元素(仅包含在给定列表中一次的元素)。解决此任务时,不要更改列表的顺序。示例:
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; } } |
我的解决方案:
然后在数组上再次循环并将数字,仅当当前数字在地图中显示超过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; } |
希望它有帮助
对于遍历同一数组的循环(在本例中是数据)使用嵌套。
首先检查每个循环的索引是否相同。如果什么都不做。如果它们不相同,请检查这些值。如果值相等,则推到数组。