|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Меньше чем в этом. А тот где сравнивается с in лучше чем Ваш, быстрее в несколько раз.
|
|
|||||
Ну так вы мой код и оптимизировали. А это уже командная работа.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: May 2008
Сообщений: 63
|
Цитата:
запустите у себя код: var n:int = 1000000; trace("N = " + n); var array:Array = []; for (var i:int = 1; i <= n; i++) { array.push(i); } var rand:int = Math.random() * n; var num:int = array.splice(rand, 1); trace("Удалили число " + num); array.sort(function(...args):int { return Math.random() > 0.5 ? -1 : 1; }); var t:Number = getTimer(); //1 способ var value:Number = 0; for (i = 1; i <= n; i++) { value += i; if (i - 1 < array.length) value -= array[i - 1]; } trace("Удаленное число(1 способ) = " + value); trace("time = " + (getTimer() - t)); t = getTimer(); //2 способ for(i = 1; i <= array.length + 1; i++) { if(array.indexOf(i) < 0) { trace("Удаленное число(1 способ) = " + i); trace("time = " + (getTimer() - t)); } } |
|
|||||
Akopalipsis, я, конечно, не знаю насчёт in, но вот это
var array:Array = []; for(var j:int = 1; j <= 100; j ++) array.push(j); array.splice(array.indexOf(3),1); array.splice(array.indexOf(40),1); trace(findMissingIntegers(array, 2)); function findMissingIntegers(arr:Array, missingNum:int = 0):Array { var missingArr:Array = []; for(var i:int = 1; i <= arr.length + missingNum; i++) { if(!i in arr) missingArr.push(i); } return missingArr; } var array:Array = []; for(var j:int = 1; j <= 100; j ++) array.push(j); array.splice(array.indexOf(3),1); array.splice(array.indexOf(40),1); trace(findMissingIntegers(array, 2)); function findMissingIntegers(arr:Array, missingNum:int = 0):Array { var missingArr:Array = []; for(var i:int = 1; i <= arr.length + missingNum; i++) { if(!(i in arr)) missingArr.push(i); } return missingArr; } var array:Array = []; for(var j:int = 1; j <= 100; j ++) array.push(j); array.splice(array.indexOf(3),1); array.splice(array.indexOf(40),1); trace(findMissingIntegers(array, 2)); function findMissingIntegers(arr:Array, missingNum:int = 0):Array { var missingArr:Array = []; for(var i:int = 1; i <= arr.length + missingNum; i++) { if(arr.indexOf(i) < 0) missingArr.push(i); } return missingArr; } Добавлено через 13 минут Вот, в общем, самый найменее громоздкий и простой для понимания код, а главное работающий, по поиску удалённых чисел.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 28.04.2014 в 19:36. |
|
|||||
Banned
|
Вот, если прибегать к формуле арифметической прогрессии:
Последний раз редактировалось toFL; 28.04.2014 в 19:54. |
|
|||||
Цитата:
var array:Array = []; for(var j:int = 1; j <= 100; j ++) array.push(j); array.splice(array.indexOf(40),1); trace(findMissingIntegers(array, 1)); trace(find(array)); function find(list:Array):int { var summ:int; var len:int = list.length; for (var i:int = 0; i < len; ++i) summ += list[i]; return (((1+len)/2) * len) - summ; } function findMissingIntegers(arr:Array, missingNum:int = 0):Array { var missingArr:Array = []; for(var i:int = 1; i <= arr.length + missingNum; i++) if(arr.indexOf(i) < 0) missingArr.push(i); return missingArr; }
__________________
There is no thing in this world that is not simple. |
|
|||||
Пример со встряхиванием массива:
var arr:Array = []; for (var j:int = 1; j <= 100; j ++) { arr.push(j); } var array:Array = arrayShuffle(arr); trace(array); array.splice(array.indexOf(40),1); trace(findMissingIntegers(array, 1)); trace(find(array)); function find(list:Array):int { var summ:int; var len:int = list.length + 1; for (var i:int = 0; i < list.length; i++) { summ += list[i]; } return (((1+len)/2) * len) - summ; } function findMissingIntegers(arr:Array, missingNum:int = 0):Array { var missingArr:Array = []; for (var i:int = 1; i <= arr.length + missingNum; i++) if (arr.indexOf(i) < 0) missingArr.push(i); return missingArr; } function arrayShuffle(arr:Array):Array { var newArr:Array = []; while (arr.length > 0) { newArr.push(arr.splice(Math.round(Math.random() * (arr.length - 1)), 1)[0]); } return newArr; }
__________________
There is no thing in this world that is not simple. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
SuriTheAngel вы были правы! С in не работает, так-как in показывает ключи.
я почему-то думал что в массивах он показывает элементы. toFL Огромное Вам Спасибо! Лучше кода и быть не может. |
|
|||||
Вот вам ещё один способ поиска удалённых чисел, но его недостаток в том, что если отсутствует последнее число, то этого он не замечает, ибо настоятельно длина предыдущего массива не задаётся(хотя если это обязательно, то можно и сделать так)
Без indexOf.
__________________
There is no thing in this world that is not simple. |
Часовой пояс GMT +4, время: 05:15. |
|
« Предыдущая тема | Следующая тема » |
|
|