盡量每天都寫點東西,也算是對我成長的乙個記錄,考研,生活都會有一點,還有一點不成熟的人生感悟。
[2023年計算機聯考真題]
已知乙個整數序列a=,其中0<=ain/2(0<=pk<=n,1<=k<=m),則稱x為a中的主元素。例如a=(0,5,5,3,5,7,5,5,),則5為主元素;又如a
=(0,5,3,5,1,5,7),則稱a中沒有主元素。假設a中n個元素儲存在乙個一維陣列中,請設計乙個盡可能高效的演算法,找出a的主元素。若存在主元素則輸出主元素,若不存在則輸出-1.要求:
(1)給出演算法基本設計思想。
(2)根據設計思想,採用c或c++語言描述演算法,關鍵之處給出注釋。
(3)說明你說設計的演算法的時間複雜度和空間複雜度。
解
(1)演算法的基本設計思想:
演算法的策略是從前向後的掃瞄陣列元素,標記出乙個可能成為主元素的元素num。然後重新計算,確定num是否是主元素。演算法可分兩步:
1)下選取候選的主元素:依次掃瞄所給陣列中的每乙個整數,將第乙個遇到的整數num儲存的c中,記錄num出現的次數為1;若遇到下乙個整數仍為num,則計數加1,否則計數減1;當計數減到0時,將遇到的下乙個數儲存到c中計數重新計為1開始新一輪的計數,即從當前位置開始重複上述過程直到掃瞄完整個陣列。
2)判斷c中的元素是否為真的主元素;再次掃瞄該陣列,統計c在其中出現的次數,若大於n/2,則為主元素;否則陣列中不存在主元素。
(2)**實現
int majority(inta,int n)
if(count>0)
for(i=0;iif(a[i]==c)
count++;
if(count>n/2)return c;
else
return -1;
}
3)實現程式的時間複雜度為o(n),空間複雜度為o(1)。
ps:時間關係注釋就不加了
冰凍三尺 之「系統登入對話方塊」
冰凍三尺 之 系統登入對話方塊 點滴積累帶來巨大進步。系統登入對話方塊,這是我做的第乙個和系統沾邊的小例子,說沾邊也只能說是名字中有 系統 兩個字,雖然很簡單,但是卻值得積累著其中的點點滴滴。因為點滴積累帶來巨大的進步。例子雖然小,但是該做的一點也不能省,首先給自己做了乙個流程。第一部分 建立資料庫...
冰凍三尺 之「全新全意為人民服務」
冰凍三尺 之 全新全意為人民服務 使用資料庫繫結訪問資料 這個例子很簡單,控制項一共用了超不過五種,一共就一行。整個過程也就是新增了幾個控制項然後設定了一下屬性就 ok了。過程不複雜實現也簡單。本來覺得沒什麼可總結的,可是仔細想想卻發現了乙個比較重要的思想性的問題。為什麼實現了這麼乙個不算複雜但也不...
easyui 收費 收費班長喻玉華三尺崗亭獻青春
2020 第四期 人物訪談報道 拼 搏 人 生 最 美 勵志先鋒人物專訪 2015年5月競聘為收費班長,在工作期間榮獲公司通報表揚1次,2015年度 收費業務我最強 知識競賽中榮獲第一名。2016年度 安康杯 勞動競賽模擬微機收費比賽中榮獲第三名 2016年度 不忘最初誓言,放飛青春夢想 演講比賽中...