百度推廣入口登錄百度推廣關(guān)鍵詞怎么優(yōu)化
本專欄為c語言練習專欄,適合剛剛學完c語言的初學者。本專欄每天會不定時更新,通過每天練習,進一步對c語言的重難點知識進行更深入的學習。
今日練習題關(guān)鍵字:字符個數(shù)統(tǒng)計 多數(shù)元素 投票法
💓博主csdn個人主頁:小小unicorn
?專欄分類:C語言天天練
🚚代碼倉庫:小小unicorn的代碼倉庫🚚
🌹🌹🌹關(guān)注我?guī)銓W習編程知識
Day1
- 題目一:
- 題目描述:
- 解題思路:
- 代碼實現(xiàn):
- 結(jié)果情況:
- 題目二:
- 題目描述:
- 解題思路:
- 代碼實現(xiàn):
- 結(jié)果情況:
- 總結(jié):
題目一:
題目描述:
題目來源:字符個數(shù)統(tǒng)計
編寫一個函數(shù),計算字符串中含有的不同字符的個數(shù)。字符在 ASCII 碼范圍內(nèi)( 0~127 ,包括 0 和 127 ),換行表示結(jié)束符,不算在字符里。不在范圍內(nèi)的不作統(tǒng)計。多個相同的字符只計算一次
例如,對于字符串 abaca 而言,有 a、b、c 三種不同的字符,因此輸出 3 。
數(shù)據(jù)范圍: 1≤n≤500
解題思路:
運用的是HASH表的思想,因為只有最多只有128種數(shù)據(jù),所以只需維護一個大小為128的字符數(shù)組,讓輸入的字符作為數(shù)組下標,取出這個下標數(shù)組中的字符直接與輸入的字符比較(不用for循環(huán)從頭再查),如果相同則跳過,不同則賦值,讓結(jié)果++,最后遇到’\n’結(jié)束循環(huán),返回結(jié)果即可。
代碼實現(xiàn):
#include<stdio.h>int main()
{int hash[128] = {0};char B;int count = 0;while (scanf("%1c", &B) != EOF) {int asc = (int)B;if (hash[asc] != 1) {count++;hash[asc] = 1;}}printf("%d", count - 1); //需要去掉最后的回車鍵
}
結(jié)果情況:
符合題目要求,問題得到解決。
題目二:
題目描述:
題目來源:多數(shù)元素
給定一個大小為 n 的數(shù)組 nums ,返回其中的多數(shù)元素。多數(shù)元素是指在數(shù)組中出現(xiàn)次數(shù) 大于 ? n/2 ? 的元素。
你可以假設(shè)數(shù)組是非空的,并且給定的數(shù)組總是存在多數(shù)元素。
解題思路:
投票法:
因為多數(shù)元素在數(shù)組里出現(xiàn)的次數(shù)絕對大于n/2,所以用不同元素消去相同元素,剩下的必然是相同元素
代碼實現(xiàn):
int majorityElement(int* nums, int numsSize)
{int candidate=nums[0];//投票對象int count=1;//票數(shù)for(int i=1;i<numsSize;i++)//遍歷投票對象{if(nums[i]==candidate)//投票對象相同,票數(shù)+1{count++;}else//投票對象不同,票數(shù)-1{count--;if(count<0)//該元素不是多數(shù)元素,更新投票對象candidate并把票數(shù)置1{candidate=nums[i];count=1;}}}return candidate;
}
結(jié)果情況:
符合題目要求,問題得到解決。
總結(jié):
文章到這里就要告一段落了,有更好的想法或問題,歡迎評論區(qū)留言。
希望今天的練習能對您有所收獲,咱們下期見!