9.18电信云笔试
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; }