Alexandroppolus,
var arr = [1,1,2,5,9,9,7,7]; function unq(arr) { var obj = {}; for(var i = 0; i < arr.length; i++){ var num = arr[i]; obj[num] ? delete obj[num] : obj[num] = 1; } return Object.keys(obj).map(n=>+n); } console.log(unq(arr)); |
опять не то. В таком решении вспомогательной памяти дохрена используется. А нужно O(1), т.е. несколько байт, независимо от длины массива. Как в решении для одного уникального
|
Alexandroppolus,
это решение проходит на кодварс, по заданию где один уникальный, надо лишь заменить return +Object.keys(obj)[0] |
Alexandroppolus,
как еще быстрей я хз, я сдаюсь, пишите |
Цитата:
---- ответ писать пока не буду, вдруг ещё кто заинтересуется |
Alexandroppolus,
в личку |
если задача найти уникальные для массива целых чисел, то это можно сделать так:
const arr = [1,1,2,5,9,9,7,7] function uniq (x) { return Array.from(new Set(x)) } alert(uniq(arr)) :) |
Кто знает существует ли более быстрый способ оставить уникальные элементы?
массив +- как в примере. var rnd =()=> Math.floor(Math.random() * 500); var arr = [], i = 1000; while(i--) arr.push(rnd()); var uniq =arr=>{ var newArr = []; for (var i = 0; i<arr.length; i++){ var flag = true; for (var j = 0; j<newArr.length; j++){ if(arr[i]===newArr[j]) { flag = false; break; } } if(flag) newArr.push(arr[i]); } return newArr; }; console.log(uniq(arr)) |
вариант из предыдущего поста должен быть в разы быстрее.
у тебя же квадратичная сложность, это весьма неоптимальный способ ) |
Цитата:
https://jsperf.com/4543543543 |
Часовой пояс GMT +3, время: 21:14. |