推斷陣列中的反覆元素

2021-09-07 12:51:52 字數 758 閱讀 7057

問題,有乙個n+1個元素的陣列。包括1到n的n個數,外加乙個反覆元素,將這個反覆元素找出。

方法一:使用置換法,因為下標是從0開始,假設nums[i]==i+1,說明元素是放在正確的位置。繼續推斷。假設nums[i] == nums[nums[i]-1],說明nums[i]就是反覆元素,是要求找到的,否則就轉換nums[i]和nums[nums[i]-1]

**例如以下:

class solution

if (nums[i] == nums[nums[i] - 1])

int tmp = nums[i];

nums[i] = nums[tmp - 1];

nums[tmp - 1] = tmp;

}return 0;

}}

方法二:取反法。在遍歷的過程中。將abs(nums[i])-1位置處的資料取反,在取反之前,假設為負,說明這個數是反覆的

**例如以下:

class solution

return 0;

}}

方法三:用floyd判圈法。

由於有反覆元素,終於會是乙個環。

這樣的方法優點是不會改動資料元素(

**例如以下:

class solution

fast = 0;

while (slow != fast)

return slow;

}}

判斷陣列中的重複元素

問題,有乙個n 1個元素的陣列,包含1到n的n個數,外加乙個重複元素,將這個重複元素找出。方法一 使用置換法,由於下標是從0開始,如果nums i i 1,說明元素是放在正確的位置,繼續判斷。如果nums i nums nums i 1 說明nums i 就是重複元素,是要求找到的,否則就轉換num...

找陣列中重複元素

題目 乙個大小為n的陣列,裡面的數都屬於範圍 0,n 1 有不確定的重複元素,找到至少乙個重複元素,要求o 1 空間和o n 時間。分析 這個題目要求用 o n 的時間複雜度,這意味著只能遍歷陣列一次。同時還要尋找重複元素,很容易想到建立雜湊表來完成,遍歷陣列時將每個元素對映到雜湊表中,如果雜湊表中...

關於陣列中重複元素的操作

在有序的陣列中,刪除重複的元素 在有序的陣列中,刪除重複的元素 include include includeusing namespace std int main int len sizeof a sizeof a 0 int i,j for i 0,j 1 jlen i 1 for i 0 i...