問題,有乙個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...