代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II
创始人
2024-01-31 01:04:48

LeetCode 977.有序数组的平方

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

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

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

class Solution {
public:vector sortedSquares(vector& nums) {vector 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 sortedSquares(vector& 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& nums) {vector 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& 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& 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、走完输出即可。

4X4的螺旋矩阵

在这里插入图片描述

class Solution {
public:vector> generateMatrix(int n) {vector> v(n, vector(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;}
};

在这里插入图片描述

相关内容

热门资讯

中国电信人工电话多少 中国电信... 当我们在使用中国移动、中国电信和中国联通提供的电信业务时,可能会发生争议。建议直接向服务提供商投诉,...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
坐月子十大禁忌 坐月子的风俗禁... 前段时间,伊能静发微博说生两个孩子都40多天没洗澡,每天都用药水擦了擦身体。但也强调了,月子怎么做是...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...