C語言實現刪除排序陣列中的重複項(順序表題二)

2021-10-17 13:13:32 字數 2024 閱讀 7420

刪除排序陣列中的重複項

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

不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 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。

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

題目資訊:1、原地修改,覆蓋操作,用不刪除的元素覆蓋刪除的元素

2、是乙個有序的陣列,可以在連續的區間內找到相同的元素

3、本題要有三個指標,乙個是idex用來做新元素的插入,乙個是i用來遍歷,乙個是j,尋找重複的區間。

}給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。

初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 的空間大小等於 m + n,這樣它就有足夠的空間儲存來自 nums2 的元素。

例項輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3

輸出:[1,2,2,3,5,6]

示例 2:

輸入:nums1 = [1], m = 1, nums2 = , n = 0

輸出:[1]

第一種方法:是開闢乙個新的空間,然後比較原來的兩個陣列中的元素,哪個元素小就放進去。比較完最後某個陣列裡面可能還會有剩下的元素沒有比較,直接將之拷貝到新開闢中的空間中。最後再將整個新空間中的元素拷貝到nums1陣列中。

第二種方法:從後向前合併,nums1本身可以存所有的元素,不需要開空間。從前向後覆蓋的話可能會有元素被覆蓋的可能,那麼我們可以從後向前找最大的元素。

//方法一

void

merge

(int

* nums1,

int nums1size,

int m,

int* nums2,

int nums2size,

int n)

//哪個陣列剩餘就把哪個剩餘的全部拷貝到新的陣列中

if(i

if(j

//最後將新陣列中全部排好序的元素拷貝進nums1中

memcpy

(nums1,newa,

sizeof

(int)*

(m+n));

free

(newa)

;}

//第二種方法

void

merge

(int

* nums1,

int nums1size,

int m,

int* nums2,

int nums2size,

int n)

else}if

(n>0)

}

刪除排序陣列中的重複陣列 C語言

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

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

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

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

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