Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For example, Given sorted array nums = [1,1,1,2,2,3], Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn't matter what you leave beyond the new length.
Remove Duplicates I 能夠參考個人這篇博客
這題中添加了一個要求,就是容許存在兩個重複值。面試
其實在這裏咱們仍然延續I中的思路。在遇到非重複值以及非多餘的重複值時,將數值移動到當前記錄的下標上。保證該下標前的值均爲知足題目條件的值。
第一次我使用了count來記錄某個值出現的次數。segmentfault
public int removeDuplicates(int[] nums) { int length = nums.length; if(length<=1){ return length; } int index = 1; int count = 1; for(int i = 1 ; i<nums.length ; i++){ if(nums[i] == nums[i-1]){ if(++count>2) continue; }else{ count = 1; } nums[index++] = nums[i]; } return index; }
可是看了一下別人的代碼,發現既然是有序數組,則能夠經過判斷該值和前前位置上的值是否相等便可知道該值是否多餘。省去了多餘的變量。數組
public int removeDuplicates2(int[] nums) { int i = 0; for (int n : nums) if (i < 2 || n > nums[i-2]) nums[i++] = n; return i; }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~微信