目录
第一题-选择题1
答案:归并排序
思路:
归并排序是外部排序
第二题-计算字符串距离
思路:
当两个字符相等时,分别比较他们上一个的字符,加1后,再和当前所需要修改的距离比较,选择小的哪一个,如果当前两个字符不相等,则则需要将上一个距离加一比较
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int get_count(const string& str1, const string& str2)
{
//判断是否为空,为空返回最长的即可
if(str1.empty() || str2.empty())
return max(str1.size(), str2.size());
int len1 = str1.size();
int len2 = str2.size();
vector<vector<int>> num(len1+1, vector<int>(len2+1, 0));
//初始化列
for(int i = 0 ; i <= len2; ++i)
num[0][i] = i;
//初始化行
for(int j = 0; j <= len1; ++j)
num[j][0] = j;
for(int i = 1; i <= len1; ++i)
{
for(int j = 1; j<= len2; ++j)
{
if(str1[i-1] == str2[j-1])
{
num[i][j] = 1 + min(num[i-1][j], num[i][j-1]);
//由于字符距离相同所以不发生变化
num[i][j] = min(num[i][j], num[i-1][j-1]);
}
else
{
num[i][j] = 1 + min(num[i-1][j], num[i][j-1]);
//由于字符距离不相同所以+1
num[i][j] = min(num[i][j], 1 + num[i-1][j-1]);
}
}
}
return num[len1][len2];
}
int main ()
{
string str1,str2;
while(cin>>str1>>str2)
{
int ret = get_count(str1, str2);
cout<<ret<<endl;
}
return 0;
}
第三题-微信红包
思路:
用哈希将所有数据映射到哈希表中,然后遍历找出出现次数为数据长度一半的数据,如果没有找到就返回0
class Gift {
public:
int getValue(vector<int> gifts, int n) {
int num[100000] = {0};
for(int i = 0; i < n; ++i)
{
num[gifts[i]]++;
}
for(int i = 0; i < n; ++i)
{
if((n/2) < num[gifts[i]])
{
return gifts[i];
}
}
return 0;
}
};