笔试真题

发布时间 2023-09-13 09:50:21作者: timeMachine331

高途总结

两题的数据处理差不多,都是很麻烦的那种,最后输出还要带数组的框跟逗号跟空格,逆天。

第一题没啥难度,但是不知道为啥只过75.

第二题ac

看下第二题,给一个无序全正整数的数组,要求求出其中连续子数组的和为目标值的最短长度,如果不存在,则返回0.

这里因为是

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <unordered_map>

using namespace std;



int backtracking(vector<int>& nums, int target){
    int n = nums.size();
    int start = 0;
    int end = 0;
    int sum = 0;
    int minLength = INT_MAX;

    while(end < n){
        sum += nums[end];
        while(sum > target && start <= end){
            minLength = min(minLength, end - start + 1);
            sum -= nums[start++];
        }

        if(sum == target){
            minLength = min(minLength, end - start + 1);
        }
        end++;
    }

    return (minLength == INT_MAX) ? 0 : minLength;
}


int main(){
    vector<int> save;
    string strs;
    cin >> strs;
    for(int i = 0; i < strs.size(); i++){
        int pos = strs.find(',', i);
        if(pos > 0 && pos < strs.size()){
            string tmp = strs.substr(i, pos - i);
            save.push_back(stoi(tmp));
            i = pos;
        }
        else{
            string tmp = strs.substr(i, strs.size() - i);
            save.push_back(stoi(tmp));
            break;
        }
    }
    int k;
    cin >> k;
    for(auto s : save) cout << s << " ";
    cout << k << endl;

    int minl = backtracking(save, k);
    cout << minl << endl;
    return 0;
}