給定乙個大小為n的陣列,找出其中的眾數。
眾數是指在陣列**現次數大於(n/2)取下界的元素。
示例1:
輸入:[3,2,3]
輸出:3
示例2:
輸入:[2,2,1,1,1,2,2]
輸出:2
#include
/* 摩爾投票演算法思想:
1、選取序列中第乙個元素為當前序列出現次數較多的元素
2、選取乙個變數來「計分」,初始為1,
3、依次遍歷第乙個元素後面的元素,遍歷的當前元素與前乙個元素不同時,得分減一,相同時,得分加一
4、當得分小於0時,改變當前序列**現次數較多的元素
時間複雜度o(n)
缺點:只適用於序列元素**現次數大於(n/2)取下界的元素
*/int
majorityelement
(int
* nums,
int numssize)
else
(nums[i]
== res)
?++cnt :
--cnt;
}return res;
}int
main()
;int numslength =
sizeof
(nums)
/sizeof
(nums[0]
);printf
("眾數為:%d\n"
,majorityelement
(nums, numslength));
return0;
}
給定乙個大小為n的陣列,找出其中所有出現次數超過(n/3)取下界的元素。
示例1:
輸入:[3,2,3]
輸出:3
示例2:
輸入:[1,1,1,3,3,2,2,2]
輸出:[1,2]
#include
#include
/* 找出陣列中元素出現次數大於(n/3)取下界的所有元素,
由數學關係式易得,乙個陣列中最多有兩個這樣的元素。
仍然採用摩爾投票演算法
*///nums:待查詢的陣列;numssize:陣列大小;*returnsize:滿足條件的元素個數
int*
majorityelement
(int
* nums,
int numssize,
int* returnsize)
cm =0;
cn =0;
//清空計分變數,統計出現次數,看是否滿足出現次數大於(n/3)取下界的條件
for(
int i =
0; i < numssize; i++)if
(cm >
(numssize /3)
) res[
(*returnsize)++]
= m;
if(cn >
(numssize /3)
) res[
(*returnsize)++]
= n;
return res;
}int
main()
;int numslength =
sizeof
(nums)
/sizeof
(nums[0]
);int* res =
majorityelement
(nums, numslength,
&returnsize)
;printf
("陣列中眾數的個數為:%d\n"
, returnsize)
;printf
("眾數為: ");
for(
int i =
0; i < returnsize; i++
)printf
("\n");
return0;
}
CTF每日一題之求素數
大概翻譯一下就是說,求一百萬以後的兩個素數,素數本身的位數加起來也得是素數 就是 23 是個宿舍 2 3 為5 5也是素數,這樣 ok,1百萬以後,這種題,默默的開啟qt 想了一下還是關了,默默的開啟pycharm 貼上 from math import sqrt def is prime n if...
每日一題 求1 2 n(中等)
劍指 offer 64.求1 2 n 求 1 2 n 要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 示例 1 輸入 n 3 輸出 6 示例 2 輸入 n 9 輸出 45 class solution 邏輯運算子的短路效應 常見的邏輯...
每日一題 1
題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...