当前位置: 首页 > news >正文

代码随想录算法【Day2】

Day2

1.掌握滑动窗口法

2.模拟题,坚持循环不变量原则

209 长度最小的子数组

暴力法:

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {//暴力法int i, j; //i代表起始点,j代表终止点int sum; //子序列之和int length = 0; //子序列的长度int result = INT32_MAX; //最终结果for(i = 0; i < nums.size(); i++){sum = 0;for(j = i; j < nums.size(); j++){sum += nums[j];if (sum >= target){length = j - i + 1;if(length < result) result = length;break;}}}return result == INT32_MAX ? 0 : result;}
};

注意暴力法里面,如果找到符合条件的子序列了,直接break跳出j的循环

双指针法(滑动窗口法):

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {//双指针法int i = 0, j = 0; //i代表起始点,j代表终止点int sum = 0; //子序列之和int length = 0; //子序列的长度int result = INT32_MAX; //最终结果for(j = 0; j < nums.size(); j++){sum += nums[j];while(sum >= target){length = j - i + 1;if(length < result) result = length;sum -= nums[i];i ++;} }return result == INT32_MAX ? 0 : result;}
};

为什么时间复杂度是O(n)?

看每一个元素被访问的次数(这也是一个好的计算时间复杂度的方法),每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。

59.螺旋矩阵II

模拟题,难点在于边界值的判断,核心是坚持循环不变量原则,这里我们坚持左闭右开

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n,0));int startx = 0, starty = 0; //横着或竖着循环的起始位置int loop = n / 2; //循环的圈数,若n为奇数,需特殊判断int mid = n / 2;int count = 1; //矩阵赋值int offset = 1; //每条要循环的边的长度int i, j;while(loop--){i = startx;j = starty;
​//按边依次循环,用到了4个forfor( ; j < n - offset; j ++){res[i][j] = count++;}for( ; i < n - offset; i++){res[i][j] = count++;}for( ; j > starty; j--){res[i][j] = count++;}for( ; i > startx; i--){res[i][j] = count++;}startx ++;starty ++;offset ++;}//若n为奇数,需要单独给中间值赋值if(n % 2){res[mid][mid] = count;}return res;}
};

http://www.mrgr.cn/news/81557.html

相关文章:

  • SpeedTree学习笔记总结
  • 概率论期末速成笔记(包过版)
  • k8s网络,跨主机容器通信机制(没看懂)
  • GitLab安装及使用
  • Llama 3 简介(一)
  • NVIDIA vGPU虚拟机显卡分片技术
  • uni-app 跨端开发精美开源UI框架推荐
  • 汇总贴:cocos creator
  • Python + 深度学习从 0 到 1(02 / 99)
  • 服务平滑发布与线上验证
  • 秒鲨后端之MyBatis【1】环境的搭建和核心配置文件详解
  • tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录
  • 增强路由器 路由器升级宽带速度
  • Text2Reward学习笔记
  • 【强化学习】Stable-Baselines3学习笔记
  • Linux系统下安装webstorm
  • 华为管理变革之道:管理制度创新
  • 19、vue3组件通信
  • Java抽象工厂+单例模式
  • 【Java】Jackson序列化案例分析