21.08.2018, 14:53
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
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));
Последний раз редактировалось j0hnik, 21.08.2018 в 14:56.
|
|
21.08.2018, 15:00
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
опять не то. В таком решении вспомогательной памяти дохрена используется. А нужно O(1), т.е. несколько байт, независимо от длины массива. Как в решении для одного уникального
|
|
21.08.2018, 15:04
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Alexandroppolus,
это решение проходит на кодварс, по заданию где один уникальный, надо лишь заменить
return +Object.keys(obj)[0]
|
|
21.08.2018, 15:06
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Alexandroppolus,
как еще быстрей я хз, я сдаюсь, пишите
|
|
21.08.2018, 15:18
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от j0hnik
|
это решение проходит на кодварс
|
но работает в разы дольше. На самом деле это косяк автора каты, он просто "не дожал" по объемам тестов при этом говорит о какой-то исключительной скорости..
----
ответ писать пока не буду, вдруг ещё кто заинтересуется
|
|
21.08.2018, 15:20
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Alexandroppolus,
в личку
|
|
22.08.2018, 12:12
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
если задача найти уникальные для массива целых чисел, то это можно сделать так:
const arr = [1,1,2,5,9,9,7,7]
function uniq (x) {
return Array.from(new Set(x))
}
alert(uniq(arr))
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
22.08.2018, 16:27
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Кто знает существует ли более быстрый способ оставить уникальные элементы?
массив +- как в примере.
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))
|
|
22.08.2018, 16:49
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
вариант из предыдущего поста должен быть в разы быстрее.
у тебя же квадратичная сложность, это весьма неоптимальный способ )
|
|
22.08.2018, 16:58
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от Alexandroppolus
|
вариант из предыдущего поста должен быть в разы быстрее.
|
Нет Сань, это к сожалению не так.
https://jsperf.com/4543543543
|
|
|
|