Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Поиск недостающего элемента в массиве (http://www.flasher.ru/forum/showthread.php?t=207649)

djyamato 28.04.2014 16:57

Поиск недостающего элемента в массиве
 
Здравствуйте
Сегодня на собеседовании поплыл.
Была задача:
Есть массив чисел от 1 до N (1,,,N) с шагом в 1
Этот массив перемешали и удалили одно из чисел
Как найти за один for это число ?

Akopalipsis 28.04.2014 17:01

Цитата:

Есть массив чисел от 1 до N (1,,,N) с шагом в 1
Если эта фраза гласит, что элементы от 1 до 100 последовательно, то найти можно
Код AS3:

currentItem = array[i];
if(i < array.lenght && array.indexOf(currentItem + 1) == -1) trace('Bingo!!!');

Добавлено через 4 минуты
или
Код AS3:

if(i < array.length && ! currentItem + 1 in array) // так быстрее будет.


ZackMercury 28.04.2014 17:10

Цитата:

i < array.length - 1
А это зачем?
Число-то удалили, а соответственно, вы отбрасываете 99-ое число массива. Да и вообще, какой смысл от этого условия? Лишняя нагрузка?

Akopalipsis 28.04.2014 17:17

В массиве сто элементов, один удалили, как будет выглядеть 98 + 1 ?)

ZackMercury 28.04.2014 17:25

Код AS3:

for(var i:int = 1; i <= array.length + 1; i++)
{
  if(array.indexOf(i) < 0) trace(i);
}


Akopalipsis 28.04.2014 17:29

Что это за чудо такое?))))

Добавлено через 3 минуты
Вы тоже собеседование не прошли.

ZackMercury 28.04.2014 17:34

Цитата:

var array:Array = [];
for(var j:int = 1; j <= 100; j ++)
array.push(j);
trace(array);
array.splice(array.indexOf(10));
for(var i:int = 1; i <= array.length + 1; i++)
{
if(array.indexOf(i) < 0) trace(i); //выводит 10
}

Сек, ошибся с функцией.
Хотя нет, не ошибся. Просто забыл передать второй параметр 1.
Цитата:

Код AS3:

var array:Array = [];
for(var j:int = 1; j <= 100; j ++)
        array.push(j);
 
trace(array);
 
array.splice(array.indexOf(10),1);
 
trace(array);
 
for(var i:int = 1; i <= array.length + 1; i++)
{
  if(array.indexOf(i) < 0) trace(i);
}


Код:

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,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100

1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100

10


Akopalipsis 28.04.2014 17:35

Эх... и я попался))) нужно же уточнить - как удалили? Хотя если придерутся, то можно сказать, что удалили, значить splice.

Добавлено через 1 минуту
Да потому что Вы не удалил даже)))

ZackMercury 28.04.2014 17:43

Всё я удалил. Просто сначала я отсекал вообще пол массива, от 10-го элемента. Мне просто IDE начала вчехлять бред насчет этой функции, пришлось лезть в доки.

Akopalipsis 28.04.2014 17:43

тогда вот так -
Код AS3:

var length:int = array.length + 1;
for(var i:int; i < length; i++)
{
    if( ! i in array) trace('Удалённое число - ' + i);
}



Часовой пояс GMT +4, время: 11:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.