AK47
第一题:只出现一次的数
#include <iostream>
#include <vector>
using namespace std;
void FindNumsAppearOnce(vector<int> &data, int &num)
{
size_t size = data.size();
if (size <= 0)
return;
int result = 0;
for (size_t i = 0; i < size; ++i)
result ^= data[i];
num = result;
}
void test()
{
int n;
cin >> n;
vector<int>data(n);
for (size_t i = 0; i < data.size(); ++i)
cin >> data[i];
int num;
FindNumsAppearOnce(data, num);
cout << num;
}
int main()
{
test();
return 0;
}第二题:相容字符串
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool isIsomorphic(string s, string t)
{
vector<int> str1(256, 0);
vector<int> str2(256, 0);
size_t size = s.size();
for (size_t i = 0; i < size; ++i)
{
if (str1[s[i]] != str2[t[i]])
return false;
str1[s[i]] = i + 1;
str2[t[i]] = i + 1;
}
return true;
}
void test()
{
string str;
cin >> str;
string substr(";");
size_t pos = str.find(substr, 0);
size_t size = str.size();
string s, t;
s = str.substr(0, pos);
t = str.substr(pos + 1);
bool is = isIsomorphic(s, t);
if (true == is)
cout << "True" << endl;
else
cout << "False" << endl;
}
int main()
{
test();
return 0;
}第三题:最大子序和
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int maxSubArray(vector<int> &nums)
{
vector<int> dp(nums.size() + 1);
dp[0] = nums[0];
for (size_t i = 1; i < nums.size(); ++i)
{
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
}
int k = 0;
for (size_t i = 0; i < nums.size(); ++i)
{
if (dp[i] > dp[k])k = i;
}
return dp[k];
}
void test()
{
int num;
vector<int> vec(200);
for (num = 0; ; ++num)
{
string strNum;
cin >> strNum;
const char *data = strNum.data();
if (*data == '[')
++data;
int pos1 = strNum.find(',');
if (pos1 != string::npos)
strNum[pos1] = 0;
vec[num] = atoi(data);
if(strNum.back() == ']')
break;
}
cout << maxSubArray(vec)<<endl;
}
int main()
{
test();
return 0;
}
京公网安备 11010502036488号