這道題開始沒思路,但是後來用雙指標的分區域法一思考,基本很快就搞出來了。不過一是有個細節搞錯了,二是還有很多地方可以優化。
p1指向重複區開頭,p2用於遍歷
int lastnum=0;
while(p2
else
else
}else
if(nums[p2]!=lastnum)
else}}
}//應該特判假如p1為-1時
if(p1==-1)
else}}
**開始寫成這樣,第一次錯誤是一直沒有重複項時p1為初值-1。當然有幾個p2++可以提出來。
public官方的這種解法當然簡潔很多,但感覺沒有之前那種套路百試不爽。int removeduplicates(int
nums)
q++;
}return p + 1;
}
本人**簡化後:
classsolution
int p1=nums.length,p2=1;//
p1指向重複區開頭,p2用於遍歷。這裡p1初始值設成這個,就不用特判了
int lastnum=nums[0];
while(p2
}else
if(nums[p2]!=lastnum)
}p2++;
}//應該特判假如p1為-1時,這裡第一次搞錯了
return
p1; }}
26 刪除排序陣列中的重複項(雙指標)
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被...
26 刪除排序陣列中的重複項 陣列 雙指標
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...
26 刪除排序陣列中的重複
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2。你不需要考慮陣列中超出新長度後面的元素。示例 2 給定 nums 0,0,1,1,1,2,2...