這篇文章給大家介紹LeetCode中怎么刪除排序數(shù)組中的重復(fù)項(xiàng),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、巴林左旗ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的巴林左旗網(wǎng)站制作公司
給定一個(gè)排序數(shù)組,你需要在 原地 刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。
示例 1:
給定數(shù)組 nums = [1,1,2],
函數(shù)應(yīng)該返回新的長度 2, 并且原數(shù)組 nums 的前兩個(gè)元素被修改為 1, 2。
你不需要考慮數(shù)組中超出新長度后面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函數(shù)應(yīng)該返回新的長度 5, 并且原數(shù)組 nums 的前五個(gè)元素被修改為 0, 1, 2, 3, 4。
你不需要考慮數(shù)組中超出新長度后面的元素。
說明:
為什么返回?cái)?shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請注意,輸入數(shù)組是以「引用」方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
你可以想象內(nèi)部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實(shí)參做任何拷貝
int len = removeDuplicates(nums);
// 在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
// 根據(jù)你的函數(shù)返回的長度, 它會打印出數(shù)組中該長度范圍內(nèi)的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
兩種思路,(1)第一次,遍歷數(shù)組時(shí),讓第一個(gè)元素當(dāng)做"哨兵"節(jié)點(diǎn),然后遍歷數(shù)據(jù)進(jìn)行后面元素的比對,不過每次遍歷數(shù)組時(shí)都要記得更新"哨兵"節(jié)點(diǎn)的數(shù)據(jù);(2),根據(jù)hashMap鍵值對集合進(jìn)行操作
import java.util.HashMap;
import java.util.Map;
public class RemoveDuplicatesTest2 {
public static void main(String[] args) {
int[] nums = {1, 1, 2};
int removeDuplicates = removeDuplicates2(nums);
System.out.println("removeDuplicates = " + removeDuplicates);
}
public static int removeDuplicates(int[] nums) {
int len = nums.length;
if (0 == len) {
return 0;
}
int prev = nums[0];
int newLen = 1;
for (int i = 1; i < len; i++) {
int num = nums[i];
if (num != prev) {
nums[newLen++] = num;
prev = num;
}
}
return newLen;
}
public static int removeDuplicates2(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
Map<Integer, Integer> map = new HashMap<>(nums.length);
int index = 0;
for (int i = 0; i < nums.length; i++) {
int value = map.getOrDefault(nums[i], 0) + 1;
map.put(nums[i], value);
if (value <= 1) {
nums[index++] = nums[i];
}
}
return index;
}
}
關(guān)于LeetCode中怎么刪除排序數(shù)組中的重復(fù)項(xiàng)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
分享名稱:LeetCode中怎么刪除排序數(shù)組中的重復(fù)項(xiàng)
本文來源:http://aaarwkj.com/article28/igcojp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、小程序開發(fā)、網(wǎng)站改版、移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)