IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 代码随想录算法训练营第二天||977.有序数组的平方 ||209.长度最小的子数组||59.螺旋矩阵II -> 正文阅读

[数据结构与算法]代码随想录算法训练营第二天||977.有序数组的平方 ||209.长度最小的子数组||59.螺旋矩阵II

?977.有序数列的平方

题目链接:977. 有序数组的平方 - 力扣(LeetCode)

学习视频地址:双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili

看到此题的一个想法:因为数组是非降序排列,所以同时对两边元素的平方大小进行对比,所以我们要使用双指针法。

实现中遇到的困难:

因为笔者刚开始学习stl,对vector容器的使用并不熟练,所以在新数组的创建上出了一点问题。算法思想是明白的。

看完代码随想录的收获:对if循环条件有更深刻的认识,不要随便乱添加判断语句,有时会出现一些缺少判断的情况。促进了我对vector容器的学习。

源代码:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
int k=nums.size()-1;
vector<int> Arr(nums.size(),0);
int i=0;
int j=nums.size()-1;
for(;i<=j;){
    if(nums[i]*nums[i]<nums[j]*nums[j]){
        Arr[k--]=nums[j]*nums[j];
        j--;
    }else{
        Arr[k--]=nums[i]*nums[i];
        i++;
    }
}
return Arr;
    }
};

209.长度最小的子数组

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

学习视频链接:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili

看到这个题的第一个想法:暴力解法。但是LeetCode直接显示超时了。

实现中遇到的困难:没有想到创造一个储存结果的变量。没有想去判断length和result的大小,直接输出length了出现了很大的问题。对c++语法不是很熟悉。

看完代码随想录的收获:学会了新的判断方式。学会了滑动窗口的本质。

源代码:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
int result =INT32_MAX;//结果
int sum=0;//和
int length=0;//长度
int i=0;
for(int j=0;j<=nums.size()-1;j++){//j表示的是快指针
sum+=nums[j];
while(sum>=target){
length=j-i+1;
result=result>length?length:result;
sum-=nums[i++];
}
}
return result==INT32_MAX?0:result;
    }
};

59.螺旋矩阵

题目链接:59. 螺旋矩阵 II - 力扣(LeetCode)

视频链接:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili

看到题目的第一想法:想到了要控制边界,然后依次循环每一个边。

实现遇到的困难:想不出循环的次数,对边界没有设限。

看完代码随想录得到的收获:对模拟过程有了一个新的认识,对边界的把控有了新的理解

源代码:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
    //用两个变量存放起始位置
int startx=0;
int starty=0;
    //一个存放最中间的坐标,一个存放边界值
int offset=1;
int mid=n/2;
int count=1;
vector<vector<int>>nums(n,vector<int>(n,0));
int i,j;
int loop=n/2;
while(loop--){//循环次数
i=startx;
j=starty;
for(;j<n-offset;j++){
    nums[i][j]=count++;
}
for(;i<n-offset;i++){
    nums[i][j]=count++;
}
for(j;j>starty;j--){
     nums[i][j]=count++;
}
for(i;i>startx;i--){
     nums[i][j]=count++;
}
offset++;
startx++;
starty++;
}
if(n%2){
    nums[mid][mid]=count;
}
return nums;
    }
};

对数组的总结:

常用方法:

1.二分法:

使用二分法的时候,要对循环的边界有明确的认定,要先确定是“左闭右闭”oder“左闭右开”等等,严格遵守循环不变量原则。

时间复杂度:O(logn)

2.双指针法:

可以在一个for循环下完成两个for循环得工作

时间复杂度:O(n)

3.滑动窗口:

能根据自序列的大小不断调整起始位置

时间复杂度:O(n)

4.模拟行为:

考察对“循环不变量”的遵守。

今日收获:学会了移动窗口,理解了模拟行为的实现。

学习时长:3小时左右,螺旋矩阵让我有点头疼。写博客也花了不少时间。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:19:25  更:2022-09-24 21:22:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:46:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码