有什么有趣的網(wǎng)站湖人排名最新
力扣 26.刪除排序數(shù)組中的重復(fù)項(xiàng)
題目描述
給你一個(gè)?非嚴(yán)格遞增排列?的數(shù)組?nums
?,請(qǐng)你?原地?刪除重復(fù)出現(xiàn)的元素,使每個(gè)元素?只出現(xiàn)一次?,返回刪除后數(shù)組的新長度。元素的?相對(duì)順序?應(yīng)該保持?一致?。然后返回?nums
?中唯一元素的個(gè)數(shù)。
考慮?nums
?的唯一元素的數(shù)量為?k
?,你需要做以下事情確保你的題解可以被通過:
- 更改數(shù)組?
nums
?,使?nums
?的前?k
?個(gè)元素包含唯一元素,并按照它們最初在?nums
?中出現(xiàn)的順序排列。nums
?的其余元素與?nums
?的大小不重要。 - 返回?
k
?。
?
?思路分析
基于雙指針法,用下標(biāo)進(jìn)行代替,從數(shù)組最左端開始,遍歷整個(gè)數(shù)組,下標(biāo)1如果不等于下標(biāo)2就把下標(biāo)1指向的值賦給下標(biāo)2,同時(shí)繼續(xù)向后遍歷完整個(gè)數(shù)組,最后返回下標(biāo)2的值(即去重后數(shù)組的長度)
整體步驟
1.定義src下標(biāo)和dest下標(biāo),dest從0開始
src從1開始(第一個(gè)不需要進(jìn)行匹配)遍歷整個(gè)數(shù)組,如果nums【src】不等于nums【dest】的就將src指向的值賦給dest(先++在賦值),同時(shí)定義一個(gè)計(jì)數(shù)器++(從1開始),最后返回count的值。
完整代碼
int removeDuplicates(int* nums, int numsSize){int src=0;int dest=0;int count=1;for(src=1;src<numsSize;src++){if(nums[src]!=nums[dest]){nums[++dest]=nums[src];count++;}}return count;}