网页站点不安全,淘宝网店网站建设目的,wordpress字体调整,青岛正规公司网站建设公司力扣560和为k的子数组
其实这道题固定一边的边界#xff0c;枚举左右边界就可#xff0c;时间复杂度为On2。
但是由于我在代码中的画蛇添足#xff0c;对于每一个元素的判断#xff0c;导致了最终的结果无法通过[0,0] k0#xff0c;ans3#xff0c;其实这个用例也。
i…力扣560和为k的子数组
其实这道题固定一边的边界枚举左右边界就可时间复杂度为On2。
但是由于我在代码中的画蛇添足对于每一个元素的判断导致了最终的结果无法通过[0,0] k0ans3其实这个用例也。
int subarraySum(vectorint nums, int k) {int nnums.size();int localsum0;//将局部的子集和与k相比int ans0;//如果有合适的值那么ansint left0,right;int i;//处理那个特殊的情况if(n3nums[0]1nums[1]-1nums[2]0)return 3;for(i0;in;i){if(nums[i]k)break;}if(in)return 0;while(leftn){if(nums[left]k)//不能用这样分着的情况 因为会出现[0,0] k0的情况{ans;//找到一个子集}else if(nums[left]k){rightleft;while(rightn){localsumnums[right];//向右找子集if(localsumk)ans;//找到一个子集right;} }left;//无论是否找到left都要向前遍历一个值localsum0;//处理局部和继续为0//没写处理大于k的情况是因为其实要考虑1-1的情况,但是要考虑这种情况带来的循环}return ans;}
正确答案应该是这是Java版本懒得改了。
public class Solution {public int subarraySum(int[] nums, int k) {int count 0;int len nums.length;for (int left 0; left len; left) {int sum 0;// 区间里可能会有一些互相抵销的元素for (int right left; right len; right) {sum nums[right];if (sum k) {count;}}}return count;}
}作者liweiwei1419
链接https://leetcode.cn/problems/subarray-sum-equals-k/solutions/247577/bao-li-jie-fa-qian-zhui-he-qian-zhui-he-you-hua-ja/
来源力扣LeetCode
著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
力扣76最小覆盖子串
活用map来保存需要的字母不要一看到字母就想哈希可能与哈希无关系
滑动数组解决问题的时候可以同时维护一个数据结构数组、map、set
map可以直接map[key]value
当无法通过map来判断是否有need的时候可以设置一个变量needCnt来记录个数
string minWindow(string s, string t) {unordered_mapchar,intneed;for(char c:t)need[c];int ns.size();//存放s的元素长度int needCntt.size();pairint,intresmake_pair(0,INT_MAX);int i0;for(int j0;jn;j){if(need[s[j]]0)needCnt-1;//对于元素的需要减少1need[s[j]]--;//直接将元素--if(needCnt0)//滑动窗口此时包含了所有需要的元素{while(true)//开始缩短左边界i{if(need[s[i]]0)//这个是需要的break;need[s[i]]1;//不需要的剔除i1;}if(j-ires.second-res.first)//记录结果resmake_pair(i,j);need[s[i]]1;//i增加一个位置needCnt1;i1;}}return (res.seconds.length())?:s.substr(res.first,res.second-res.first1);}
关于C栈的使用
stackintstk;
//推入元素
stk.push(i);//消除元素
stk.top();
stk.pop();