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;
}