代码随想录——Day02

Windows 下 Codex MCP 服务配置全攻略:从环境搭建到实战避坑 本文详细介绍了在Windows系统下配置Codex MCP服务的完整流程与实战避坑指南。内容涵盖从Node.js环境搭建、Codex CLI安装,到核心配置文件config.toml的编写与解析,并重点解决了Windows平台特有的环境变量设置、MCP服务启动命令适配等关键难点,帮助开发者顺利完成从环境准备到编辑器插件连接的整个配置过程。 阅读详情

Day 2:数组02

1.长度最小的子数组

leetcode:209. 长度最小的子数组 - 力扣(LeetCode)

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm> // 包含 sort 函数所在的头文件
using namespace std;

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int left=0, right=0;
        int reslen = 0;
        //用于计算滑动窗口内的数组和
        int sum=0;
        if(nums.size()>0){
            sum += nums[right];
        } else {
            return 0;
        }
        while(left<nums.size()){
            if(sum >= target){
                int lentemp = right-left+1;
                if(reslen == 0){
                    reslen = lentemp;
                } else {
                    reslen = lentemp<reslen ? lentemp : reslen;
                }
                sum -= nums[left];
                left++;
            } else {
                if(right<nums.size()-1){
                    right++;
                } else {
                    //这里应该有两种情况:
                    //1:r到头了没找到,那就返回res初始值0
                    //2:l右移没找到更合适的,那就返回res
                    return reslen;
                }
                sum += nums[right];
            }
        }
        return reslen;
    }
};

int main(int argc, char *argv[])
{
	vector<int> _nums;
    int _num;
    int _target;
    while(cin>>_num){
        _nums.push_back(_num);
        if(cin.get() == '\n'){
            break;
        }
    }
	cin>>_target;
	
	Solution solution;
	int ret = solution.minSubArrayLen(_target, _nums);
	cout<<ret<<endl;
    // for(auto a :ret){
    //     cout<<a<<" ";
    // }
	return 0;
}

这里用到的就是滑动窗口,这里的写法比较复杂,下面是代码随想录的解法:

他是用的一个for循环内嵌while,而且对于最终数组长度reslen的初始化更加便捷,直接赋值INT32_MAX,最后判断的时候也是,直接判断这个值是否有改变就可以

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int result = INT32_MAX;
        int sum = 0; // 滑动窗口数值之和
        int i = 0; // 滑动窗口起始位置
        int subLength = 0; // 滑动窗口的长度
        for (int j = 0; j < nums.size(); j++) {
            sum += nums[j];
            // 注意这里使用while,每次更新 i(起始位置),并不断比较子序列是否符合条件
            while (sum >= s) {
                subLength = (j - i + 1); // 取子序列的长度
                result = result < subLength ? result : subLength;
                sum -= nums[i++]; // 这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)
            }
        }
        // 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
        return result == INT32_MAX ? 0 : result;
    }
};

作者:代码随想录
链接:https://leetcode.cn/problems/minimum-size-subarray-sum/solutions/1706223/by-carlsun-2-iiee/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

附加题目

leetcode:904. 水果成篮 - 力扣(LeetCode)


leetcode:76. 最小覆盖子串 - 力扣(LeetCode)


2.螺旋矩阵II

leetcode:59. 螺旋矩阵 II - 力扣(LeetCode)

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> result(n, vector<int>(n,0));
        int loop = n/2;
        int startx=0, starty=0;
        int offset = 1;
        int count = 1;

        while(loop--){
            int i = starty;
            int j = startx;
            
            //上
            for(j; j<n-offset; j++){
                result[i][j] = count++;
            }
            //右
            for(i; i<n-offset; i++){
                result[i][j] = count++;
            }
            //下
            for(; j>startx; j--){
                result[i][j] = count++;
            }
            //左
            for(; i>starty; i--){
                result[i][j] = count++;
            }
            offset++;
            startx++;
            starty++;
        }

        if(n%2 == 1){
            result[n/2][n/2] = n*n;
        }
        return result;
    }
};

int main(int argc, char *argv[])
{
    int _target;
	cin>>_target;
	
	Solution solution;
	vector<vector<int>> ret = solution.generateMatrix(_target);
    for(auto a :ret){
        for(auto b :a){
            cout<<b<<" ";
        }
        cout<<endl;
    }
	return 0;
}

这个题比较绕,主要的结题思路就是复杂问题简单化,一圈一圈的去处理问题

每一圈都是画四条边:上、右、下、左

每一条边都是按照左闭右开的区间画

几个变量:loop圈数、(startx,starty)是每一圈的起始坐标点、offset是每一圈的偏移量,由于确定“右开”的坐标点

再一个要注意的点就是,二维数组和xy坐标是不一样的!!!
xy坐标向右是x++,而[i,j]二维数组向右是j++!


3.区间和

kamacoder:44. 开发商购买土地(第五期模拟笔试)

先看一下前缀题目:

kamacoder:58. 区间和(第九期模拟笔试)

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
	int n;
    cin>>n;
    vector<int> array;
    while(n--){
        int num;
        cin>>num;
        array.push_back(num);
    }
    //区间和
    vector<int> sum_array(array.size(), 0);
    int sum=0;
    for(int i=0; i<array.size(); i++){
        sum += array[i];
        sum_array[i] = sum;
    }
    int a,b;
    while(cin>>a>>b){
        int res=0;
        if(a==0){
            res = sum_array[b];
        } else {
            res = sum_array[b] - sum_array[a-1];
        }
        cout<<res<<endl;
    }

	return 0;
}

数组区间和其实就是:先创建一个等长数组,然后每一位存储0到该位的累计和,算区间和的时候呢,输入[a,b],如果a=0,就返回sum_array[b],否则就返回sum_array[b]-sum_array[a]。

回来看原来的题:

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
	int n,m;
    if (!(cin >> n >> m)) {
        cerr << "Failed to read dimensions." << endl;
        return 1;
    }

    vector<vector<int>> array(n, vector<int>(m, 0));

    // Read matrix elements into the array.
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (!(cin >> array[i][j])) {
                cerr << "Invalid input for matrix element." << endl;
                return 1;
            }
        }
    }

    //前n行和
    vector<int> sum_i(n,0);
    int sum =0;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            sum += array[i][j];
        }
        sum_i[i] = sum;
    }

    //前m列和
    vector<int> sum_j(m,0);
    int _sum=0;
    for(int j=0; j<m; j++){
        for(int i=0; i<n; i++){
            _sum += array[i][j];
        }
        sum_j[j] = _sum;
    }

    int res = INT32_MAX;
    //所有数的总和
    int all_sum = sum_i[n-1];
    //按照行来遍历
    for(int _n=0; _n<n; _n++){
        int cut_i = abs(all_sum - sum_i[_n] - sum_i[_n]);
        res = cut_i<res ? cut_i : res;
    }

    //按照列来遍历
    for(int _m=0; _m<m; _m++){
        int cut_j = abs(all_sum - sum_j[_m] - sum_j[_m]);
        res = cut_j<res ? cut_j : res;
    }
    cout<<res<<endl;


	return 0;
}

这个题其实结合上面的题目,解起来还好,主要的问题在于输入部分的处理,我之前的写法是这样的:
 

	int n,m;
    cin>>n>>m;
    vector<vector<int>> array(n, vector<int>(m, 0));
    int num=0;
    vector<int> vec;
    while(cin>>num){
        vec.push_back(num);
        if(cin.get() == '\n'){
            array.push_back(vec);
            vec.clear();
        }
        if(cin.peek()  == '\n'){
            array.push_back(vec);
            break;
        }
    }

这样本地测试没有问题,但是提交上去后会提示“存在数组越界的风险

改成了chatgpt给的写法:

int n, m;
    if (!(cin >> n >> m)) {
        cerr << "Failed to read dimensions." << endl;
        return 1;
    }

    vector<vector<int>> array(n, vector<int>(m, 0));

    // Read matrix elements into the array.
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (!(cin >> array[i][j])) {
                cerr << "Invalid input for matrix element." << endl;
                return 1;
            }
        }
    }

先定义好二维数组的大小,再依次输入定值。

把大表拆成更好用的“小仓库”:SAP HANA 表分区设计、分区裁剪与内存代价全解析 摘要:本文深入解析SAP HANA分区技术的核心价值与实现策略。作为内存数据库的"手术刀",分区通过将逻辑表横向切分为独立物理容器,显著提升并行计算能力与查询效率。重点探讨了三种分区类型(Range、Hash、Round-robin)的适用场景,以及分区裁剪的优化原理与前提条件。特别指出分区设计需要平衡查询模式与数据分布,并揭示了分区对内存占用的双向影响机制:既可能因字典复制增加消耗,也可能因数据纯度提升压缩率。通过电商订单表等实际案例,展示了合理分区如何将分钟级报表优化至秒级响应。文章 阅读详情

相关推荐

YOLOv12改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv12高效涨点改进专栏》提供500+创新改进方案,涵盖卷积、主干网络、注意力机制等模块优化,适用于检测、分割等任务。改进点来自顶会论文和个人经验,支持多种模型版本和任务场景。专栏包含详细教程、数据集增强、性能评估工具等,帮助科研人员快速实现模型优化和论文发表。提供完整运行项目和环境配置指导,适合计算机及相关专业研究人员使用,持续更新保障长期科研需求。

Ai缝合怪、助力小伙伴高效发论文 2142

代码随想录 | Day 02 & Day 03 附加每日一题

主要掌握:二分、双指针、滑动窗口、前缀和。

qq_41189841的博客 355

GEE必须会教程——一文教会你研究区域分块计算与合并

一整块算不是挺好的吗?emmmm,用过的人都知道,GEE好比幼年期的“紫妍”,要用“丹药”来养的,除非你是萧炎小友,到哪都有人给爆金币。我们今天想做的是计算2020年夏季西藏自治区的植被覆盖度(FVC),FVC的估算需要使用归一化植被指数(NDVI数据),这里我们用到的产品是MODIS的相关数据产品,该产品的分辨率是25 0m。下载好的结果毕竟是一块一块的,怎么对下载好的结果进行拼接,变成一张大图呢,别急,接下来,我们上科研小霸王——R语言。此处,我们通过省份数据,按照属性筛选,得到西藏自治区的行政边界。

Promising_GEO的博客 2474

代码随想录day02

209 长度最小的子数组。59 螺旋矩阵II。

Xiaoxiaoniao16的博客 562

代码随想录算法训练营Day01~02

二分、前缀和、滑动窗口、双指针、模拟

rachel_pretty的博客 1052

代码随想录第58期day02

分析:题意为在一个数组中找到最小连续的字数组的和大于等于target,那么就有很多种可能了,可能之前的数都很小,但是刚好遇到一个大数(大数大于等于target)使得和大于等于target,那么此时最小字数组长度应该是1,由此,本题我们可以用滑动窗口思想来解决,附带。,用双指针的思想来解决。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]输出:[[1,2,3],[8,9,4],[7,6,5]]

qq_64919637的博客 391

代码随想录刷题Day02

1.一开始并没能直接写出滑动窗口的代码 ,连续子数组需要联想到滑动窗口3.达到target值后缩小窗口(一直在移动右侧的,所以拿掉左侧的看够不够target)

weixin_53563082的博客 218

代码随想录 day23 回溯part02

本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制。

2401_88561446的博客 210

代码随想录Day02

今天的状态比昨天好太多,起码在前几个小时可以集中注意力,本来是想下班回家先睡一觉的,也睡不着,但是还可以。现在困了。在时间上可能需要控制一下,在工作日的时间,每道题控制在1个小时之内吧,实在不会就混个眼熟先。腰疼,害怕,第一次感觉到腰疼。今日股票+0.5%,再涨40天就回本啦!

qq_45655634的博客 580

代码随想录 Day02

leetcode

weixin_41910116的博客 2033

代码随想录day7: 哈希表part02

首先四个数组都是长度为 n, 然后需要选取不同的下标数值相加为0.请你计算有多少个元组 (i, j, k, l) 能满足?那么就是三道题,需要具体细致debug一遍去领悟细节。看了一下题解,所以还是 排序+双指针。按照题目提醒,需要考虑去重问题。最粗暴的解法肯定是 循环?第一思路是 排序+双指针。● 383. 赎金信。

RessCris的博客 210

代码随想录DAY02

leetcode

shiliuhua05的博客 406

代码随想录Day02 | 209.长度最小的子数组,59.螺旋矩阵II,区间和,开发商购买土地

维护横向和纵向的前缀和数组,分别统计,计算两个区间的差的最小值。循环向边界上的四条边添加数字,同时更新边界值。维护前缀和数组,索引0处设置为0,方便计算。原理很简单,写起来又很繁琐,令人难崩的题。最典型的滑动窗口代码。区间和即为前缀和的差。

weixin_43992121的博客 263

代码随想录Day02打卡

代码随想录Day02打卡

qq_59615070的博客 325

代码随想录day2_数组part02

代码随想录day2数组part2

Gewe_Xiaokang的博客 851

代码随想录Day02

leetcode算法

weixin_48831698的博客 181

小红书 算法一面 十一

例如 **Soft MoE** 采用这种方式,大幅提升负载均衡性,但会增加计算开销。- **熵正则化**:直接最大化门控概率分布的熵,熵越大表示分布越均匀,公式为 $\mathcal{L}_{ent} = -\frac{1}{N}\sum_{i=1}^N\sum_{k=1}^K p_{ik}\log p_{ik}$。- **核心原理**:源自 **GShard** 和 **Switch Transformer**,通过最小化专家选择概率分布的熵,迫使门控网络给每个专家分配相近的 token 数量。

XLYcmy的博客 440

理发店极简会员管理系统(源码)面向中小理发店、社区店、夫妻店的一体化轻量客户管理工具

理发店极简会员管理系统面向中小理发店、社区店、夫妻店的一体化轻量客户管理工具。内置 SQLite,单机可运,具有会员,充值,消费,员工,服务,业绩,审计功能。主要功能账号体系店长账号注册与登录修改密码所有业务接口默认鉴权(除登录/注册)会员管理新增/编辑会员、状态切换、分页查询支持设置 4 位校验码(默认手机号后四位)新增会员可直接录入初次充值金额充值与消费会员下拉支持模糊检索(姓名/手机号)消费时强校验会员校验码(与后端存储值比对)交易流水分页查询与导出员工与服务员工管理、服务类型管理(均支持分页)注册后自动初始化默认服务类型(按租户)统计与审计经营概览、服务分布、员工业绩(分页)审计日志分页,关键操作可追溯项目亮点极简上手:围绕理发店真实日常,不做过度设计。安全可用:统一鉴权 + 审计日志 + 租户隔离。离线友好:SQLite 本地持久化,无需单独部署数据库。可打包分发:可直接产出可执行程序,适合门店终端落地。

起落架着陆动态仿真分析模型及参数优化设计.pdf

入门教材,适合广泛应用,对于初学者可以进行体系建立,了解当前时代更新知识。紧跟时代变化知识体系。快来看一看。

上一篇: 代码随想录——Day 01
_小手冰凉
博客等级 码龄5年 5粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值