<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【一天一道Leetcode】刪除有序數(shù)組的重復(fù)項(xiàng)Ⅱ

          共 2278字,需瀏覽 5分鐘

           ·

          2021-04-11 22:50


          本篇推文共計(jì)2000個字,閱讀時間約3分鐘。



          01


          題目描述


          題目描述:


          給一個有序數(shù)組nums,請?jiān)?/span>刪除重復(fù)出現(xiàn)的元素,使每個元素最多出現(xiàn)兩次,返回刪除后數(shù)組的長度。

           

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


          示例:

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


          提示:

          1.0 <= nums.length <= 3*10^4

          2.-10^4 <= nums[i] <= 10^4

          3.nums 已按升序排列




          02


          思路和方法


          由題意最后只用輸出新數(shù)組的長度。


          我們可以利用遍歷,設(shè)定兩個開始節(jié)點(diǎn)。

          從數(shù)組第一個元素進(jìn)行遍歷,依次對比元素是否相同,將符合題目要求的元素往前移動。


          最后輸出數(shù)組元素不同的那部分長度即可。

           

          例如我們用一個例子來直觀地說明。

          初始數(shù)組num=[1,2,2,2]

          設(shè)定兩個起點(diǎn)進(jìn)行遍歷數(shù)組,因?yàn)轭}目要求使每個元素最多出現(xiàn)兩次,
          所以此時我們設(shè)置節(jié)點(diǎn)的起始值
          node=1,j=2,
          num[node]=1,num[j]=2,

          如果num[i]!=num[node-1]
          通過node++,使得node++的值等于此時i的值。
          使得num[node]=num[i]

          利用這樣的方式,將同一個數(shù)組的符合要求的元素都往前移動。
          最后輸出節(jié)點(diǎn)node+1的長度即可。




          我們用代碼表示為:

          class Solution:
              def removeDuplicates(self, nums: List[int]) -> int:
                  node = 1
                  for i in range(2, len(nums)):
                      if nums[i] != nums[node-1]:
                          node += 1
                          nums[node] = nums[i]
                  return node + 1





          我們由這道題浮想一下,如果題目繼續(xù)改為:

          給一個有序數(shù)組nums,請刪除重復(fù)出現(xiàn)的元素,使每個元素最多出現(xiàn)n次,返回刪除后數(shù)組的新長度。

           

          設(shè)定n是一個值,我們的函數(shù)表達(dá)式可以表示為:

          class Solution:
              def removeDuplicates(self, nums: List[int]) -> int:
                  node = n-1
                  for i in range(n, len(nums)):
                      if nums[i] != nums[node-(n-1)]:
                          node += 1
                          nums[node] = nums[i]
                  return node + 1




          往期回顧

          【年終總結(jié)】你好2021,再見2020。


          【秋招紀(jì)實(shí)錄】一篇特別正經(jīng)的【騰訊】求職經(jīng)驗(yàn)分享


          【一天一道Leetcode】旋轉(zhuǎn)鏈表



          ☆ END ☆

          你與世界

          只差一個

          公眾號

          瀏覽 66
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操p网| 色婷婷精品无码 | 成人自拍偷拍无码 | 久久久久久久久久国产 | 成人肏逼视频在线 |