溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

LeetCode中如何刪除排序數(shù)組中的重復(fù)項(xiàng)

發(fā)布時(shí)間:2021-08-02 15:49:59 來(lái)源:億速云 閱讀:149 作者:Leah 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)LeetCode中如何刪除排序數(shù)組中的重復(fù)項(xiàng),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

 

一,刪除排序數(shù)組中的重復(fù)項(xiàng)II

 

1,問(wèn)題簡(jiǎn)述

給定一個(gè)增序排列數(shù)組 nums ,你需要在 原地 刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素最多出現(xiàn)兩次,返回移除后數(shù)組的新長(zhǎng)度。

不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。

說(shuō)明:

為什么返回?cái)?shù)值是整數(shù),但輸出的答案是數(shù)組呢?

請(qǐng)注意,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見的。

你可以想象內(nèi)部操作如下:

// nums 是以“引用”方式傳遞的。也就是說(shuō),不對(duì)實(shí)參做任何拷貝
int len = removeDuplicates(nums);

// 在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見的。
// 根據(jù)你的函數(shù)返回的長(zhǎng)度, 它會(huì)打印出數(shù)組中該長(zhǎng)度范圍內(nèi)的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

   

2,示例描述

示例 1:

輸入:nums = [1,1,1,2,2,3]
輸出:5, nums = [1,1,2,2,3]
解釋:函數(shù)應(yīng)返回新長(zhǎng)度 length = 5, 并且原數(shù)組的前五個(gè)元素被修改為 1, 1, 2, 2, 3 。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例 2:

輸入:nums = [0,0,1,1,1,1,2,3,3]
輸出:7, nums = [0,0,1,1,2,3,3]
解釋:函數(shù)應(yīng)返回新長(zhǎng)度 length = 7, 并且原數(shù)組的前五個(gè)元素被修改為 0, 0, 1, 1, 2, 3, 3 。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
 

提示:

0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 按遞增順序排列


   

3,題解思路

根據(jù)鍵值對(duì)hashmap進(jìn)行操作,繼續(xù)看下下面的程序

 

4,題解程序


import java.util.*;

public class RemoveDuplicatesTest {
   public static void main(String[] args) {
       int[] nums = {1, 1, 1, 2, 2, 3};
       int removeDuplicates = removeDuplicates(nums);
       System.out.println("removeDuplicates = " + removeDuplicates);
   }

   public static int removeDuplicates(int[] nums) {
       if (nums == null || nums.length == 0) {
           return 0;
       }
       Map<Integer, Integer> hashMap = new LinkedHashMap<>();
       int index = 0;
       for (int i = 0; i < nums.length; i++) {
           int value = hashMap.getOrDefault(nums[i], 0) + 1;
           hashMap.put(nums[i], value);
           if (value <= 2) {
               nums[index++] = nums[i];
           }

       }
       return index;
   }
}


關(guān)于LeetCode中如何刪除排序數(shù)組中的重復(fù)項(xiàng)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI