我用演算法學golang(刪除有序陣列中的重複項 )

undefined_fx發表於2021-07-30

本系列文章幫助想要一起go的同學,歡迎一起創(ban)作(yun)

題目詳情

給你一個有序陣列 nums ,請你 原地 刪除重複出現的元素,使每個元素 只出現一次 ,返回刪除後陣列的新長度。

不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 O(1) 額外空間的條件下完成。

  • 示例1

    輸入:nums = [1,1,2]
    輸出:2, nums = [1,2]
    解釋:函式應該返回新的長度 2 ,並且原陣列 nums 的前兩個元素被修改為 1, 2 。不需要考慮陣列中超出新長度後面的元素。
  • 示例2

    輸入:nums = [0,0,1,1,1,2,2,3,3,4]
    輸出:5, nums = [0,1,2,3,4]
    解釋:函式應該返回新的長度 5 , 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4 。不需要考慮陣列中超出新長度後面的元素。

    我的解答

    func removeDuplicates(nums []int) int {
      if len(nums) == 0{
      // 首先判斷是否是空陣列
          return 0
      }
      i := 0
      for j:=1;j<len(nums);j++{
      // 使用雙指標;一個快指標進行++操作,一個慢指標讓排好序的元素依次連線,最後慢指標加1即為元素個數
              if nums[j] != nums[j-1]{
              //注意此處j與 j-1 比較;與 j+1 比較會導致溢位報錯
                  i++
                  nums[i] = nums[j]
              }
          }
      return i+1
    }

    點選圖解助你更好理解

    學到了

    go基礎資料型別與控制語句

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章