Тема Описание:
Учитывая одномерный массив, в котором элемент 0 удаляются, относительные позиции ненулевых элементов остаются неизменными, конечной цель массива остается в исходном массиве, а также ряд других, чем определенные длины элементов все установлены в ноль.
Проблема решения идеи:
(1) ненулевые элементы массива движется вперед, временную сложность O (N).
Идеи: первые ненулевые элементы вперед последней оставшейся позиции, а затем сбрасывается в 0.
1 публичных недействительный moveZeroes ( INT [] НУМС) { 2 , если (nums.length <1 ) 3 возврата ; 4 INT Index = 0 ; 5 для ( INT = 0; г <nums.length; я ++ ) { 6 , если (0 =! НУМС [я]) { 7 НУМС [Index ++] = НУМС [I]; 8 } 9 } 10 для ( INT I = индекс; г <nums.length; я ++ ) { 11 НУМС [I] = 0 ; 12 } 13 14 }
Использование двух рук, положение обмена. Временная сложность O (N).
Мышление: можно использовать два указателя, первый указатель всегда указывает на элемент 0 слева направо, второй указатель является указателем на траверс, когда значение не 0 при перемещении указателя, и это первый элемент указатель для обмена элементов.
. 1 публичных недействительными moveZeroes ( INT [] в НУМС) { 2 // Первый указатель всегда указывает на текущий элемент равен 0 3. INT Первый = 0 ; . 4 . 5 для ( INT ВТОРОЙ = 0; ВТОРОЙ <nums.length; ВТОРОЙ ++ ) { . 6 // 0 и не 0 обмен 7. ЕСЛИ (в НУМС [ВТОРОЙ]! = 0 ) { 8. INT ТЕМП = в НУМС [Первый]; . 9 в НУМС [Первый] = в НУМС [Второй], 10 в НУМС [секунды] = TEMP; . 11 First ++ ; 12 } 13 } 14 }