Чтобы удалить элемент массива 0

Тема Описание:

Учитывая одномерный массив, в котором элемент 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      }

 

рекомендация

отwww.cnblogs.com/wangyufeiaichiyu/p/11238506.html