今日题解
推荐社区:万人千题
我们社区新增加了问答频道,大家可以在里面询问有关算法的问题,如果直到如何解决,社区成员会为你们解答的
判断字符是否唯一
思路:哈希集合不用我再多说了吧
class Solution {
public:
bool isUnique(string astr) {
unordered_set<char> set;
for(int i=0; i<astr.size(); i++) {
if(set.count(astr[i]) != 0) {
return false;
}
set.insert(astr[i]);
}
return true;
}
};
第一次只出现一次的字符
思路:用哈希表来统计字符出现的次数,若遍历该字符只出现一次,则返回它的下标,否则返回一个空字符
class Solution {
public:
char firstUniqChar(string s) {
unordered_map<char, int> map;
for(char &c : s) {
map[c]++;
}
for(char &c : s) {
if(map[c] == 1) return c;
}
return ' ';
}
};
赎金信
思路:用一维数组代替哈希表,提高效率;
先遍历magazine,将里面的字符去重,并对各个字符进行计数
最后遍历ransomNote,如果ransomNote中的字符在magazine中的不存在,则返回false
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int record[26] = {0};
for(int i=0; i<magazine.size(); i++) {
record[magazine[i] - 'a']++;
}
for(int i=0; i<ransomNote.size(); i++) {
record[ransomNote[i] - 'a']--;
if(record[ransomNote[i] - 'a'] < 0) {
return false;
}
}
return true;
}
};
飞机座位分配概率
思路:其实是抽签的意思,只有一个人没票,
第n个乘客要么坐在自己的位置上,要么坐在其他人的位置,只有1/2的几率
所以除了只有一个人的情况下,任何人坐在自己座位上的几率都是1/2
class Solution {
public:
double nthPersonGetsNthSeat(int n) {
return n == 1 ? 1.0 : 0.5;
}
};
期望个数统计
思路:这题目意思就是让我们去重,然后求剩下数组的大小;
使用哈希集合,不用排序,速度还快
class Solution {
public:
int expectNumber(vector<int>& scores) {
unordered_set<int> hashset;
for(auto &s : scores) {
hashset.insert(s);
}
return hashset.size();
}
};
用rand7()实现rand10()
思路:调用两次Rand7(),那么可以生成 1-49 之间的随机整数,我们只用到其中的前 40 个用来实现Rand10()
class Solution {
public:
int rand10() {
int num1=rand7(), num2=rand7();
while(num1+(num2-1)*7>40){//当大于40时退出循环
num1=rand7() , num2=rand7();
}
return (num1+(num2-1)*7)%10+1;//产生0-10的随机数
}
};
n个骰子的点数
思路:错了好多次才整出来的,淦
1、初始化第一个骰子的值,从第二个骰子开始计算,
2、第i个骰子能够得到5i+1个数,状态压缩,
3、开辟5i+1的数组空间,遍历每一个可能投掷得到的数值,
4、它可以从第i-1个骰子能得到的数值(dp数组中记录的值)
5、加上当前第i个骰子可能投的数(1~6)转移过来,只要除6就行
class Solution {
public:
vector<double> dicesProbability(int n) {
vector<double> dp(6, 1.0/6.0);
for(int i=2; i<=n; ++i) {
vector<double> temp(5*i + 1, 0);
for(int j=0; j<dp.size(); ++j) {
for(int k=0; k<6; ++k) {
temp[j+k] += dp[j]/6.0;
}
}
dp = temp;
}
return dp;
}
};