双指针

未排序正数数组中累加和为给定值的最长子数组的长度

http://www.nowcoder.com/questionTerminal/a4e34287fa1b41f9bd41f957efbd5dff

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//维护一个动态窗口;
void Print(vector<int>& nums,int k) {

    if(nums.size() == 0 || k <= 0){
        cout << 0 << endl;
        return;
    }

    //定义左右边界
    int left = 0;
    int right = 0;
    int sum = nums[left];
    int len = 0;
    while (left <= right ) {

        if (sum == k) {
            len = max(len,right - left + 1);
            sum -= nums[left++];
        }
        else if (sum < k) {
            right++;
            if (right == nums.size()) {
                break;
            }
            sum += nums[right];
        }
        else {
            sum -= nums[left++];
        }
    }
    cout << len << endl;
}

int main() {

    int n, k;
    while (cin >> n >> k) {
        vector<int> nums(n);
        for (int i = 0; i < n; ++i) {
            cin >> nums[i];
        }
        Print(nums,k);
    }
    return 0;
}
全部评论
老哥,你这是错的,首位是3的时候,就跳出循环了
点赞 回复 分享
发布于 2020-08-14 09:03

相关推荐

白火同学:只是实习的话,你这份简历应该也差不多了。真要优化的话,因为面实习的话,没有开发经验,面试更重视技术栈水平。 1、重视JavaSE的基础吧,集合、泛型算是比较基础的基础,多线程、反射、JVM内存模型才是基础; 2、技术栈写到具体的点,比如Elasticsearch的使用写到某个点,限制面试官自由发挥,防止问了相关问题最后又答不上,如果真没把握建议不写,降低面试官的心理预期; 3、技术栈不要重复,比如技术栈第二条和第八条可以合并改为“熟悉Redis中间件,包括基本数据结构、缓存策略、持久化机制,了解缓存三剑客及其解决方案,并有相关项目经验。”; 4、项目指标量化,比如“达到xx秒的响应速度”(不过这个就有点偏校招社招的要求了,实习简历不写也无伤大雅)。
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务