LeetCode-數(shù)組-刪除有序數(shù)組的重復(fù)元素

題目描述

給定一個排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度。

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


給定數(shù)組 nums = [1,1,2], 

函數(shù)應(yīng)該返回新的長度 2, 并且原數(shù)組 nums 的前兩個元素被修改為 1, 2。

解題思路

采用雙指針方式處理。

  1. 初始指針 i, j 位置為 0
  2. 指針 j 先向右移動
  3. 比較指針 i,j 元素是否相同,若指針i,j元素相同則指針 j 繼續(xù)向右移動;反之將指針 j 元素復(fù)制到指針 i + 1 處元素
  4. 當(dāng)指針 j 移動到數(shù)組末尾時則停止

其流程如下圖所示:

image

實現(xiàn)

public static int solution (int[] nums) {
    int i = 0, j = 0;

    while (true) {
        // 指針 j 向右移動
        j++;

        // 指針 j 移動到數(shù)組末尾則退出,說明數(shù)組元素都判斷了去重
        if (j >= nums.length) {
            break;
        }

        if (nums[j] == nums[i]) {
            // 指針 i, j 元素相同,說明重復(fù)元素;
            // 指針 j 繼續(xù)向右移動
            continue;
        } else {
            // 指針 i, j 元素不相同;則將指針 j 元素復(fù)制到 指針 i 后一位,這樣就保證指針 i 后元素不重復(fù)
            nums[i + 1] = nums[j];
            // 指針 i 向右移動,繼續(xù)處理
            i++;
        }
    }

    return i + 1;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,614評論 3 44
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,039評論 0 2
  • LeetCode基礎(chǔ)算法-數(shù)組 算法 LeetCode 數(shù)組相關(guān) 1. 從排序數(shù)組中刪除重復(fù)項 描述:給定一個排序...
    24K男閱讀 1,314評論 0 1
  • 轉(zhuǎn)自:http://blog.csdn.net/oreo_go/article/details/52116214 ...
    YYT1992閱讀 1,278評論 0 4
  • 事情沒有發(fā)生前總有千萬種預(yù)想,覺得如果是我肯定不會這樣做,肯定不會那樣做。事情發(fā)生在自己身上以后才會發(fā)現(xiàn),自己其實...
    羊青草閱讀 238評論 0 0

友情鏈接更多精彩內(nèi)容