時間複雜度o(n),空間複雜度o(1)
給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
示例:輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:從前往後遍歷,遍歷時不斷更新零的數量,每個數都根據零的數量往前移動相應位置;必須在原陣列上操作,不能拷貝額外的陣列。
儘量減少操作次數。
這樣操作會把所有0都覆蓋掉,在末尾更改相應數量的0。比如零的數量為2,[nums.size()-record, nums.size()]都要改為0。
排除特殊情況;
變數record記錄零的數量;
迴圈中,i的邊界條件會跟著零的數量進行變化,不然會越界;
覆蓋的時候要考慮用來覆蓋的這個數是不是0,通過while的條件判斷。如果是0,則要繼續往後找不是0的數,並更新零的數量;
while中i+record要小於 nums.size()-1,如果小於nums.size(),下一條語句會越界;
同時!nums[i+record]很巧妙的解決了第一次和第二次遇到零要不同處理的問題;
第二個for迴圈,末尾改零。
class solution
for(int i = nums.size() - record; i < nums.size(); i++)
if(nums[i] != 0)
nums[i] = 0;}};
20 4 11 缺失數字 簡單
時間複雜度o nlogn 空間複雜度o 1 給定乙個包含 0,1,2,n 中 n 個數的序列,找出 0 n 中沒有出現在序列中的那個數。示例 1 輸入 3,0,1 輸出 2 示例 2 輸入 9,6,4,2,3,5,7,0,1 輸出 8 說明 你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來...
20 4 11 驗證回文串 簡單
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false 先整理好字串,字串改為只有小寫字...
LeetCode283 移動零(簡單)
原題目給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。題目大意 將陣列所有的零移至末尾,且不改變其他數字的順序,且只能開闢常數級...