??博客主頁:愛敲代碼的小楊.
?專欄:《Java SE語法》
??感謝大家點(diǎn)贊????收藏?評(píng)論???,您的三連就是我持續(xù)更新的動(dòng)力??
??小楊水平有限,歡迎各位大佬指點(diǎn),相互學(xué)習(xí)進(jìn)步!
1. 題目描述
給你一個(gè) 非嚴(yán)格遞增排列 的數(shù)組 nums
,請(qǐng)你 原地 刪除重復(fù)出現(xiàn)的元素,使每個(gè)元素 只出現(xiàn)一次 ,返回刪除后數(shù)組的新長(zhǎng)度。元素的 相對(duì)順序 應(yīng)該保持 一致 。然后返回 nums
中唯一元素的個(gè)數(shù)。
考慮 nums
的唯一元素的數(shù)量為 k
,你需要做以下事情確保你的題解可以被通過:
- 更改數(shù)組
nums
,使nums
的前k
個(gè)元素包含唯一元素,并按照它們最初在nums
中出現(xiàn)的順序排列。nums
的其余元素與nums
的大小不重要。 - 返回
k
。
示例1:
輸入:nums = [1,1,2]
輸出:2, nums = [1,2,_]
解釋:函數(shù)應(yīng)該返回新的長(zhǎng)度 2 ,并且原數(shù)組 nums 的前兩個(gè)元素被修改為 1, 2 。不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例 2:
輸入:nums = [0,0,1,1,1,2,2,3,3,4]
輸出:5, nums = [0,1,2,3,4]
解釋:函數(shù)應(yīng)該返回新的長(zhǎng)度 5 , 并且原數(shù)組 nums 的前五個(gè)元素被修改為 0, 1, 2, 3, 4 。不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
提示:
1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
-
nums
已按 非嚴(yán)格遞增 排列
題目鏈接??
2. 解題思路
首先數(shù)組是有序的,就說明重復(fù)的元素是相鄰的。刪除重復(fù)元素,實(shí)際上是將不重復(fù)的元素移動(dòng)到數(shù)組的左側(cè)(即數(shù)組前k
個(gè)元素)
- 定義兩個(gè)指針
p
和q
,p
用于記錄不重復(fù)的元素的位置,q
用于遍歷數(shù)組 - 比較
p
和q
位置的元素是否相等。 - 如果相等,將
q
后移一位 - 如果不想等,將
q
位置的元素復(fù)制到p + 1
位置上,q
后移一位 - 重復(fù)上訴過程,直到
q
等于數(shù)組長(zhǎng)度 - 返回
p + 1
,即為新數(shù)組長(zhǎng)度。
3. 代碼
class Solution {
public int removeDuplicates(int[] nums) {
int p = 0;
int q = 1;
while (q < nums.length) {
if (nums[p] != nums[q]) {
nums[p + 1] = nums[q];
p++;
}
q++;
}
return p + 1;
}
}
運(yùn)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-826041.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-826041.html
到了這里,關(guān)于【每日一題】2.LeetCode——?jiǎng)h除有序數(shù)組中的重復(fù)項(xiàng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!