leetcode 150道題 計劃花兩個月時候刷完,今天(第二天)完成了兩道(3-4)150:
- (26. 刪除有序數組中的重復項) 題目描述:
給你一個 非嚴格遞增排列 的數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。考慮 nums 的唯一元素的數量為 k ,你需要做以下事情確保你的題解可以被通過:更改數組 nums ,使 nums 的前 k 個元素包含唯一元素,并按照它們最初在 nums 中出現的順序排列。nums 的其余元素與 nums 的大小不重要。
返回 k 。
第一版(我感覺還可以這個可以搞個通用的)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=1)return len;int index=0;int temp=nums[0];// 找出第一個 重復的for(int i=1;i<len;i++){if(temp==nums[i]){index=i;break;}else{temp=nums[i];}}// 執行調換 按相順序去重if(index==0)return len;for(int i=index;i<len;i++){if(temp!=nums[i]){nums[index++]=nums[i];temp=nums[i];}}return index;}
}
第二版(看了之前寫的,這題我之前也做過了,但是這次還是卡了很久,但是我感覺第二版沒有我第一版好理解,不是很好想出來)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=1)return len;int index=1;int temp=nums[0];for(int i=1;i<len;i++){if(temp!=nums[i]){nums[index++]=nums[i];temp=nums[i];}}return index;}
}
4.(80. 刪除有序數組中的重復項 II) 題目描述:
給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使得出現次數超過兩次的元素只出現兩次 ,返回刪除后數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。
第一版(這是上一題的延伸版,所以我就按我剛寫的那樣去想了,真的我感覺我這個可以作為一個通類,但是人家解題的也好像可以。。)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=2)return len;int index=0;int temp=nums[0];int flag=1;for(int i=1;i<len;i++){if(temp!=nums[i]){temp=nums[i];flag=1;}else{if(flag==2){index=i;break;}flag++;}}if(index==0)return len;for(int i=index;i<len;i++){if(temp!=nums[i]){nums[index++]=nums[i];temp=nums[i];flag=1;}else{flag++;if(flag<=2){nums[index++]=nums[i];}}}return index;}
}
第二版(確實很厲害,感覺遇到這類題,就可以全部這樣去弄啊)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=2)return len;int slow=2,fast=2;while(fast<len){if(nums[slow-2]!=nums[fast]){nums[slow]=nums[fast];slow++;}fast++;}return slow;}
}
我下來按照第一版思路寫了一下這次的 第三題(26. 刪除有序數組中的重復項),確實是模板直接通過了!!
他是數字只能出現一次,第四題是兩次
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=1)return len;int slow=1,fast=1;while(fast<len){if(nums[slow-1]!=nums[fast]){nums[slow]=nums[fast];slow++;}fast++;}return slow;}
}
學習太累了,真的今天差點沒心情去搞這個 leetcode ,刷視頻還是舒服,但是為了跳槽!!!加油。