Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #111 (permalink)  
Старый 11.08.2018, 10:16
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

6Ку
на входе массив вида [ 1, 8, 4, 4, 6, 1, 8 ] числа целые, от 1 до 2^31, в котором нужно найти уникальный элемент и вернуть его. массивы большие важна скорость.

https://www.codewars.com/kata/find-t...ain/javascript

findUnique([1, 8, 4, 4, 6, 1, 8]) //6;
findUnique([ 1234567 ]) //1234567;
findUnique([ 1, 4, 4, 5, 5, 3, 3, 2, 2 ])// 1;
findUnique([ 2, 2, 5, 5, 4, 3, 3, 1, 1 ])// 4;
findUnique([ 3, 5, 5, 4, 4, 3, 2, 2, 9 ])// 9;

Последний раз редактировалось j0hnik, 20.08.2018 в 11:14.
Ответить с цитированием
  #112 (permalink)  
Старый 11.08.2018, 12:32
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Мне больше нравится вариант с двумя уникальными числами.

j0hnik,
ты, кстати, не написал, что тут числа целые, от 0 до 2^31

Последний раз редактировалось Alexandroppolus, 12.08.2018 в 01:55.
Ответить с цитированием
  #113 (permalink)  
Старый 12.08.2018, 04:55
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Alexandroppolus,
дополнил
Ответить с цитированием
  #114 (permalink)  
Старый 17.08.2018, 14:39
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

https://www.codewars.com/kata/gerrymander-solver

Веселая задачка по мотивам этой их американской избирательной системы. Есть квадрат 5х5, в каждой ячейке по одному избирателю, 10 из них за тебя, 15 против, нет воздержавшихся. Надо разбить квадрат на 5 областей (по 5 избирателей в каждой области), чтобы одержать победу в трех областях. Области должны быть "связными", т.е. всю область можно обойти, только пересекая границы соседних ячеек в ней (соседние - значит имеют общую сторону).
Для какого-то расклада решения может не быть, тогда вернуть null
Ответить с цитированием
  #115 (permalink)  
Старый 19.08.2018, 22:00
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650


простенькая, под чай.
Дан отсортированный массив целых чисел в котором нужно найти наименьший индекс который равен значению ( arr[index] == index )
если такого индекса нет, вернуть -1

Ваш алгоритм должен быть очень эффективным.

Примеры:
вход: [-8,0,2,5]
выход: 2, поскольку массив arr[2] == 2

вход: [-1,0,3,6]
выход: -1

для тестов будет использоваться
Стартовые (коротенькие массивы)
и для проверки производительности
массивы длинной 200 000
Количество испытаний: 1 000

https://www.codewars.com/kata/elemen...ain/javascript
Ответить с цитированием
  #116 (permalink)  
Старый 19.08.2018, 22:59
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

j0hnik,
опять забыл важное условие числа в массиве не повторяются, все разные

а в целом сразу понятно куда копать - двоичный (или даже интерполяционный) поиск, a[i] >= i - смотрим влево, a[i] < i - вправо

Последний раз редактировалось Alexandroppolus, 19.08.2018 в 23:49.
Ответить с цитированием
  #117 (permalink)  
Старый 20.08.2018, 01:02
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Alexandroppolus,
1 цикл находит нужную тысячу второй нужный индекс. и по скорости этого уже достаточно т.к 6к.
Ответить с цитированием
  #118 (permalink)  
Старый 20.08.2018, 08:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Alexandroppolus
поиск, a[i] >= i - смотрим влево, a[i] < i - вправо

function indexEqualsValue(a)
      {
        var max = a.length;
        var min = 0;
        var i;
        while (min != max) {
            i = Math.floor((max + min)/2);
            if (a[i] > i) max = i;
            else if (a[i] < i) min = i + 1;
            else if (i && a[i-1] == i-1) max = i;
            else return i
        }
            return -1
      }
      var i = indexEqualsValue([-8,0,2,5])
      alert(i);//2
      i = indexEqualsValue([-1,0,3,6])
      alert(i);//-1
      i = indexEqualsValue([0,1,2,3])
      alert(i);//0
      i = indexEqualsValue([-3,0,1,3,10])
      alert(i);//3

Последний раз редактировалось рони, 20.08.2018 в 09:06.
Ответить с цитированием
  #119 (permalink)  
Старый 20.08.2018, 09:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
Хорошие решение
Ответить с цитированием
  #120 (permalink)  
Старый 21.08.2018, 09:26
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

если кому интересно #112 пост
решение
function findUnique(numbers) {
  return numbers.reduce((a, b) => a ^ b);
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестовое задание Yandex xShift Общие вопросы Javascript 22 17.02.2018 21:53
Задание с SIP heeel Firefox/Mozilla 0 12.06.2017 01:12
Интересное задание "Поединок" помогите решить Anton27 Общие вопросы Javascript 1 23.05.2017 22:24
Тестовое задание. Дайте идею. FINoM Оффтопик 14 28.03.2011 10:09
Помогите сделать тестовое задание начального уровня по js makregistr Работа 1 16.12.2010 14:26