陣列 請在給出的整數陣列中找到重複的數字

2021-09-25 23:21:35 字數 1074 閱讀 2165

題目:在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。

例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。

思路:我們注意到,陣列中的數字都在0到n-1範圍內。如果這個陣列中沒有重複的數字,那麼當陣列排序後,數字i就會出現在索引為i的位置上。但是現在是陣列中有重複的數字,有些位置上可能存在多個數字,有些位置上沒有數字。

從頭到尾掃瞄這個陣列中的每個數字,當掃瞄到下標為i的數字時,首先比較這個數字(記為m)和下標

i是否相等,若相等,接著掃瞄下乙個數字;若不相等,則將m與索引為m上的數字進行比較。如果它與第m個數字相等,就找到了乙個重複的數字;若不相等,則將第i個數字和第m個數字交換,把m放在屬於它的位置上。接下來便是重複比較下去,直到發現乙個重複的數字。

舉例說明:

#include using namespace std;

class solution

// 判斷陣列中元素是否合法

for(int i = 0; i < length; i++)

}// 遍歷查詢第乙個重複的數

for(int i = 0; i < length; i++)

swap(numbers[i], numbers[numbers[i]]);}}

return false;

}};int main()

; solution b;

int c = 0;

b.duplicate(a, 7, &c);

cout << c << endl;

return 0;

}

如何在給定的整數陣列中找到重複的數字

最先湧現的想法是遍歷一遍陣列,用hash表記錄每乙個數字出現的次數 用空間換時間 劍指offer解法 重新排序陣列每個數字,當掃瞄到數字m的時候判斷下標為i的數字是否等於m 如果是,就尋找下乙個 如果不是,就判斷下標為m的對應的數字是否等於m,如果它與第m個數字相等,就等於找到了乙個重複的數字,如果...

隨機整數陣列去重與排序

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序...

C語言 整數陣列去重並排序

一 c語言中自有的qsort 函式 功能 使用快速排序對要排序的物件進行排序 原型 void qsort void base,int nelem,int width,int fcmp const void const void 引數介紹 1 待排序陣列的首位址 2 待排序陣列中元素的個數 3 各個元...