在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    LeetCode移動(dòng)零

    給定一個(gè)數(shù)組 nums,編寫(xiě)一個(gè)函數(shù)將所有 0 移動(dòng)到數(shù)組的末尾,同時(shí)保持非零元素的相對(duì)順序。

    說(shuō)明:

  • 必須在原數(shù)組上操作,不能拷貝額外的數(shù)組。
  • 盡量減少操作次數(shù)。
  • void moveZeroes(int* nums, int numsSize){ int count = 0, length = numsSize-1; while (length >= 0) { if(nums[length] == 0) { count++;//計(jì)數(shù) int temp = length; while (temp 0) { nums[numsSize-count] = 0; count–; }}

    官方答案:雙指針

    思路及解法

    使用雙指針,左指針指向當(dāng)前已經(jīng)處理好的序列尾部,右指針指向待處理序列的頭部。

    右指針不斷向右移動(dòng),每次右指針指向非零數(shù),則將左右指針對(duì)應(yīng)的數(shù)交換,同時(shí)左指針右移。

    注意到以下性質(zhì):

    左指針左邊均為非零數(shù);

    右指針左邊直到左指針處均為零。

    因此每次交換,都是將左指針的零與右指針的非零數(shù)交換,且非零數(shù)的相對(duì)順序并未改變。

    void swap(int *a, int *b) { int t = *a; *a = *b, *b = t;}void moveZeroes(int *nums, int numsSize) { int left = 0, right = 0; while (right < numsSize) { if (nums[right]) { swap(nums + left, nums + right); left++; } right++; }}

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月30日 20:05
    下一篇 2022年6月30日 20:06

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息