[leetcode, JS] 283. Move Zeroes

mxxn·2023년 8월 17일
0

leetcode

목록 보기
32/198

문제

문제 링크 : Move Zeroes

풀이

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    const nonZeroLeng = nums.filter(el => el !== 0).length;
    for(let i=0; i<nums.length; i++) {
        if(i === nonZeroLeng) {
            break;
        }
        if(nums[i] === 0) {
            nums.splice(i,1)
            nums.push(0)
            i--
        }
    }
};
  1. in-place로 nums를 modify 해야함
  2. 0이 아닌 숫자의 개수(nonZeroLeng)를 구하고
  3. nums length만큼 for문을 돌면서
  4. nums[i]가 0이면 splice, push, i--를 통해 0을 뒤로 보내고
  5. i가 nonZeroLeng와 같아지면 break;
  • Runtime 93 ms, Memory 48.5 MB

다른 풀이

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    let index = 0;
    for(let i = 0; i < nums.length; i++){
        if(nums[i] != 0){
            let temp = nums[i];
            nums[i] = nums[index];
            nums[index] = temp;
            index++
        }
    }
};
  1. 0을 연속하게 만들고 0이 시작되는 처음을 뒤로 바꾸는 방식

    [ 0, 1, 0, 3, 12 ]
    [ 1, 0, 0, 3, 12 ]
    [ 1, 0, 0, 3, 12 ]
    [ 1, 3, 0, 0, 12 ]
    [ 1, 3, 12, 0, 0 ]

  • Runtime 66 ms, Memory 46 MB
profile
내일도 글쓰기

0개의 댓글