给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
思路分析
循环数组,计算0的数量,如果数组内元素不为0则跟前面的0进行交换
$arr = [0,14,9,1,4,6,-3,2,0,99,13,20,0,17,15,3,0]; //方法一 function moveZeroes1($nums) { $zeroNum = 0; $numsSize = count($nums); for ($i = 0; $i < $numsSize; $i++) { if ($nums[$i] == 0) { $zeroNum++; } else { if ($zeroNum != 0) { $nums[$i - $zeroNum] = $nums[$i]; $nums[$i] = 0; } } } return $nums; } print_r(moveZeroes1($arr)); //方法二 function moveZeroes2($nums) { $j = 0; $numsSize = count($nums); for ($i = 0; $i < $numsSize; $i++) { if ($nums[$i] != 0) { $nums[$j++] = $nums[$i]; } } while ($j < $numsSize) { $nums[$j++] = 0; } return $nums; } print_r(moveZeroes2($arr));
登录后可发表评论
08月29日 12:09