陣列中長度超過一半的數字

2022-08-15 19:18:08 字數 1529 閱讀 8469

一開始 老不對老不對,我以為是 把vevtor 換成陣列就對了  我以為是這個問題呢   其實不是  

原因竟然是  end=index-1;    這裡要拿出來才行 不然就是不對 注意吧 

class

solution

else

}int result=numbers[middle];

//接下來要判斷是否 這個數字沒有滿足大於陣列一半的要求

int num=0

;

for(int i=0;i)

if(num>length/2

)

return

result;

else

return0;

}public

:

int partition(vector & numbers,int low,int

high)

swap(numbers[low],numbers[high]);

while(lowpivotkey)

swap(numbers[low],numbers[high]);

}return

low;

}public

:

void swap(int &a,int &b)

};

思路二:如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。

在遍歷陣列時儲存兩個值:一是陣列中乙個數字,一是次數。遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減1;若次數為0,則儲存下乙個數字,並將次數置為1。遍歷結束後,所儲存的數字即為所求。然後再判斷它是否符合條件即可。

通俗易懂的說法:

採用陣地攻守的思想:

第乙個數字作為第乙個士兵,守陣地;count = 1;

遇到相同元素,count++;

遇到不相同元素,即為敵人,同歸於盡,count--;當遇到count為0的情況,又以新的i值作為守陣地的士兵,繼續下去,到最後還留在陣地上的士兵,有可能是主元素。

再加一次迴圈,記錄這個士兵的個數看是否大於陣列一般即可。

//

********************方法2********************

//這個比較複雜,就是下一值如果和當前值一致,count就+1,否則-1,如果為0,則捨棄記錄當前值,改下一值,最後+1的值可能會超過一半

int morethanhalfnum_solution2(int* numbers, int

length)

else

if (numbers[i] ==result)

times++;

else

times--;

}if (!checkmorethanhalf(numbers, length, result))

result = 0

;

return

result;

}

陣列中數字超過一半的數字

題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。1,利用hashmap 2,利用陣列排序 3,列舉法 暴力演算法 public class 陣列中數字超過一半的數字 e...

陣列中超過一半的數字

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。思路 定義乙個變數儲存當前元素,乙個計數器儲存次數,若次數等於0,則重新取字元。若次數大於零,遇到相同字元計數器 1,不同字元計...

出現次數超過陣列長度一半的數字

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列,由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。hashmap 法 此法思路簡單,可以使用hashmap 記錄當前的數字和他出現的次數 但是重點在於 遍歷整個map,找到符合條件的值 2。消去法 既...