高途总结
两题的数据处理差不多,都是很麻烦的那种,最后输出还要带数组的框跟逗号跟空格,逆天。
第一题没啥难度,但是不知道为啥只过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; }