刪除排序陣列中的重複項 go實現

2021-10-08 09:58:23 字數 1472 閱讀 3960

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

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

示例 1:

給定陣列 nums =[1,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

你不需要考慮陣列中超出新長度後面的元素。

思路分析

因為是排序陣列,只需要進行相鄰之間的比較。

定義left為0,right為1,遍歷陣列,如果left和right相等則right+1,如果不相等,讓left+1,並與right互換,而後讓right+1

**實現

func removeduplicates(nums [10]int)int 

left,right:=0,1 //定義left和right

for right<=len(nums)-1else

} fmt.println(nums[:left+1]) //輸出陣列內元素

return left+1 //輸出個數

}func main()

count:=removeduplicates(array)

fmt.println("count is",count)

}

得到輸出

[0 1 2 4 5 7 10]

count is 7

以此例詳細解釋

該陣列為[0,0,0,1,1,2,4,5,7,10]

left為0,right為1,指向的值都是0,

開始遍歷,left=right,right++

直到right的下標為3,指向值為1時,left和right值不等

left+1,與right互換,隨後right也+1

陣列變成 [0,1,0,0,1,2,4,5,7,10],此時,left下標為1,right下標為4

繼續遍歷,left與right相等,都為1,right++

此時,right指向了2,不相等,left+1與right互換,right再+1

陣列變成了[0,1,2,0,1,0,5,7,10] 此時,left下標為2,值為2,right下標為6,值為5.

以此類推,隨後的5、7、10這幾個值都是單獨的,都會依次交換到left+1

最後輸出就輸出到left+1個數。

刪除排序陣列中的重複項

題目描述 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為...

刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...

刪除排序陣列中的重複項

給定陣列 nums 1,1,2,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2。你不需要考慮陣列中超出新長度後面的元素。給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nums 的前五個元素被修改為 0,1,2,3,4。...