力扣原题《长度最小的子数组》,无序版(不考虑元素必须要相邻)纯手搓,已验证,有序版在下一篇
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] 并返回其长度。如果不存在符合条件的子数组返回 0 。示例 1输入target 7, nums [2,3,1,2,4,3]输出2解释子数组 [4,3] 是该条件下的长度最小的子数组。示例 2输入target 4, nums [1,4,4]输出1示例 3输入target 11, nums [1,1,1,1,1,1,1,1]输出0提示1 target 1091 nums.length 1051 nums[i] 104我的答案classMinSubArray{public:MinSubArray(){}intminSubArrayLen(inttarget,vectorintnums){//先排序std::sort(nums.begin(),nums.end());//此处会打乱顺序//双指针vectorint::iterator leftnums.end()-2;vectorint::iterator rightnums.end()-1;if(*righttarget){return1;}else{intsum0;while(leftnums.begin()){//求和sum0;for(vectorint::iterator ileft;iright;i){sum*(i);}if(sumtarget){for(vectorint::iterator ileft;iright;i){std::cout*i,;}std::coutstd::endl;sumright-left1;break;}sum0;if(leftnums.begin()){break;}left--;}returnsum;}return0;}};intmain(){vectorvectorintnums;vectorinttarget;nums.push_back({2,3,1,2,4,3});nums.push_back({1,4,4});nums.push_back({1,1,1,1,1,1,1,1});nums.push_back({1,2,3,4,5});nums.push_back({12,28,83,4,25,26,25,2,25,25,25,12});target.push_back(7);target.push_back(4);target.push_back(11);target.push_back(15);target.push_back(213);MinSubArray minSubArray;for(vectorvectorint::iterator iternums.begin();iter!nums.end();iter){std::cout最小子数组长度为:minSubArray.minSubArrayLen(target[iter-nums.begin()],*(iter))std::endl;}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2453141.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!