LeetCode 977.有序数组的平方

题目链接:977.有序数组的平方

思路:
1、先对每个数进行遍历平方,并插入新的容器中
2、对容器进行排序,返回就可以了

缺陷:开辟了新的容器空间

class Solution {public:vector<int> sortedSquares(vector<int>& nums) {vector<int> v;for (int i = 0; i < nums.size(); i++) {v.push_back(pow(nums[i],2));}sort(v.begin(), v.end());return v;}
};


思路:
写此博客的过程中,突然想到我为什么还要重新开辟容器空间,直接在原数据上进行操作不就好了嘛,然后直接改了代码,这就没有额外的内存消耗了。
1、直接对原数据进行平方并进行替换
2、对容器进行排序,返回就可以了

class Solution {public:vector<int> sortedSquares(vector<int>& nums) {for (int i = 0; i < nums.size(); i++) {nums[i] = pow(nums[i],2);}sort(nums.begin(), nums.end());return nums;}
};

LeetCode 209.长度最小的子数组

题目链接:209.长度最小的子数组

解法一:暴力(不考虑超时)

以下代码为暴力方法,for循环里面嵌套一个for循环进行搜索,却只通过了17个测试用例,后面一直超时错误,也没想到其他方法,就看了别人的方法,在后面。

class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {vector<int> v;int x,y;int sum2 = 0;for (int i = 0; i < nums.size(); i++) {if (nums[i] >= target) {v.push_back(1);}}for (int i = 0; i < nums.size()-1; i++) {int sum = nums[i];for (int j = i+1; j < nums.size(); j++) {sum += nums[j];if (sum >= target) {x = i;y = j;int sub = y-x+1;v.push_back(sub);break;}}}if (v.empty()) {v.push_back(0);}sort(v.begin(),v.end());return v[0];}
};


官方的暴力更简便点,但都一个思路,我写的冗余点,但官方暴力还是无法AC。

class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();if ( n == 0) {return 0;}int ans = INT_MAX;for (int i = 0; i < n; i++) {int sum = 0;for (int j = i; j < n; j++) {sum += nums[j];if (sum >= target) {ans = min(ans, j-i+1);break;}}}return ans == INT_MAX ? 0 : ans;}
};

解法二:滑动窗口

思路:不断的调节子序列的起始位置和终止位置,假如先设置起始位置,其思想和暴力没什么区别,所以得先设置终止位置。
1、设置j为终止位置指针,不断往后遍历,直到大于等于target的位置
2、滑动起始位置,往后移动一位(这时候窗口内的和会减去之前起始的一位,由于减去的这个数的值不知道大小,所以可能减去还是会大于等于target,所以要用while进行判断),然后不断进行更新判断就行

class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int ans = INT32_MAX;int sum = 0;int i = 0;for(int j = 0; j < nums.size(); j++){sum += nums[j];while(sum >= target) {ans = min(ans, j-i+1);sum = sum - nums[i];i++;}}return ans == INT_MAX ? 0 : ans;}
};

LeetCode 59.螺旋矩阵II

题目链接:59.螺旋矩阵II

思路:按照螺旋的规律,对矩阵进行填充,先填外圈,再填内圈,直到最里面
根据下图可有效得到:
1、先判断要填几圈,也就是最外层的for循环要走多少次。
2、每一圈填充时,每次都走该圈的边长减1
即,走4X4最外圈时,每次都走3步,走里圈2X2时,每次都走1步。
走5X5最外圈时,每次都走4步,走里圈3X3时,每次都走2步,最后还剩下一个。
3、由于每圈的走法都是一样的,都分为四次,所以只需要写一圈的的走法就可以
设定四个指针变量,方便到内圈的时候也适用。
第一次走,横坐标不变(为heng),纵坐标从zong走到zong_wei - 1;
第二次走,纵坐标不变(为zong_wei),横坐标从heng走到heng_wei - 1;
第三次走,横坐标不变(为heng_wei),纵坐标从zong_wei走到zong + 1;
第四次走,纵坐标不变(为zong),横坐标从heng_wei走到heng + 1;
执行完,对zong++;zong_wei–;heng++;heng_wei–;即可进入下一圈。

注意:特殊奇数螺旋矩阵的时候,最里面一圈只填入一个,当zong和zong_wei都指向最中间时(heng和heng_wei也指向最中间)插入完,会再对它们进行++和–操作,这时候会报错,所以这时候需要判断以下。

4、走完输出即可。

class Solution {public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> v(n, vector<int>(n));int heng = 0;int heng_wei = n-1; int zong = 0;int zong_wei = n-1;int k = n/2;int m = 1;if (n == 1){v[0][0] = 1;}else{for (int j = 0; j <= k-1; j++) {for (int i = zong; i <= zong_wei-1; i++) {v[heng][i] = m;m ++;}for (int i = heng; i <= heng_wei-1; i++) {v[i][zong_wei] = m;m ++;}for (int i = zong_wei; i >= zong + 1; i--) {v[heng_wei][i] = m;m ++;}for (int i = heng_wei; i >= heng + 1; i--) {v[i][zong] = m;m ++;}heng ++;heng_wei --;zong ++;zong_wei --;if (heng == heng_wei){v[heng][heng] = m;}}}return v;}
};

代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II相关推荐

  1. 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

    目录 一.今日心得感悟 1.数组从小到大排序 ①冒泡法--时间复杂度:O(nlogn) ②使用排序函数qsort--时间复杂度:O(nlogn) ③两端->中间(双指针法) --时间复杂度:O( ...

  2. 代码随想录算法训练营第二天|leetcode 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    leetcode 977.有序数组的平方 想到昨天写的双指针,十分刻意用了一下,感觉还是比较生疏,还得加强练习和思考,然后发现还需要排序,想到了vector的排序sort(),但是觉得直接用不好,也忘 ...

  3. 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、​LeetCode 209.长度最小的子数组、LeetCode 59.螺旋矩阵II

    LeetCode 977.有序数组的平方 双指针法:数组其实是有序的, 只不过负数平方之后可能成为最大数了.那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间.此时可以考虑双指针法 ...

  4. 随想录一期 day2 [977.有序数组的平方|209. 长度最小的子数组|59.螺旋矩阵II(剥洋葱)]

    977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 思路 递增数组,平方后最大值一定在最左侧或者最右侧,可想到– ...

  5. 977. 有序数组的平方|209. 长度最小的子数组|59. 螺旋矩阵 II

    977. 有序数组的平方 原理 准备:双指针.一个空数组.双指针指向的两个元素作比较,更大的数平方之后,放入空数组的尾部空位. 图解 其实这题的指针有两种方法: 从两边向中间靠拢,得到的是由大到小的值 ...

  6. 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。

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

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

    目录: 977.有序数组的平方 209.长度最小的子数组 1.暴力输出法 2.滑动窗口法 59.螺旋矩阵II 总结: 今日收获: 977.有序数组的平方 因为是递增且有负数的数组,那么他们的平方如果还 ...

  8. 代码随想录训练营第二天|LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

    day2 | LeetCode977.有序数组的平方.209.长度最小的子数组.59.螺旋矩阵II 创建时间: October 13, 2022 3:29 PM 一.今日任务 977.有序数组的平方 ...

  9. 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...

最新文章

  1. c++中求字符串数组的min/max
  2. argparse.ArgumentParser()用法解析
  3. 杭电 汉诺塔问题总结
  4. 《每日一题》290. Word Pattern
  5. 错误:unrecognized command line option “-std=c++11”
  6. python技巧(1)--如何转换itertools.chain对象为数组
  7. springmvc 中@Controller和@RestController的区别
  8. java伪代码生成器_JAVA单例模式的实现伪代码
  9. [转载]:C#两种不同的存储过程调用方法
  10. 树与图的深度优先遍历
  11. Auto病毒,落雪病毒,威金病毒,U盘病毒,魔波病毒,arp病毒,QQ病毒,熊猫烧香病毒,rose病毒清除方法
  12. Wordpress 网站搭建及性能监控方法详解!
  13. 圆形时间html,html5 canvas实现圆形时钟代码分享
  14. eval(转换html,js eval函数使用,js对象和字符串互转实例
  15. MVP模式研究与实践
  16. 线性代数 --- 如何求解不可逆的mxn长方形矩阵Ax=0的通解Null(A)和Ax=b的通解
  17. 正则表达式二:正则表达式元字符
  18. 电脑经常蓝屏是什么原因
  19. 碳排放zc汇总、碳排放权交易、省级碳排放效率、环保数据集(2007-2022年)
  20. System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”

热门文章

  1. XLNet:Generalized Autoregressive Pretraining for Language Understanding(2019-6-19)
  2. Windows 10 TH2首个Cumulative Update发布,解决隐私设置问题
  3. 借记卡、贷记卡、预付卡、准贷记卡、信用卡
  4. 2018年互联网暴利创业项目
  5. Abaqus纤维混凝土3D 泡沫混凝土 三维随机几何 三维混凝土细观 多面体骨料建模
  6. Excel字符串截取函数
  7. QML地图Map中使用QPainterPath,并显示任意点经纬度位置
  8. SpringBoot 修改tomcat端口
  9. 能恢复手机短信数据恢复软件下载
  10. redis队列批量获取