有序数组的平方 和 滑动窗口 和 螺旋矩阵

这篇具有很好参考价值的文章主要介绍了有序数组的平方 和 滑动窗口 和 螺旋矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.有序数组的平方

leetcode

代码如下(示例):

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


    }

    return A;
    }
};


负数的平方  是要比较小正数平方大的   
可以先求出所有数的平方,在排序,较麻烦
采用双指针
头指针 i 和尾指针 j 和 记数组元素个数的 k
将  头指针  和 尾指针 所指元素 平方进行比较  较大一个放到新数组的尾部  指针减一  直到i=j

2.滑动窗口 

leetcode

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int j = 0;
        int result = INT32_MAX;
        int sum = 0;
        int i = 0;

        for ( ; j < nums.size() ; j++) {
            sum += nums[j];
            while ( sum >= target) {
                int length = j - i + 1;
                result = result > length ? length : result;
                sum -= nums[i];
                i++;
            }
        }

          return result = result == INT32_MAX ? 0 : result;
    }
  
};


j 为窗口尾部   i为窗口头部
用j依次往后遍历     计算  从头到尾的sum 与 所给val比较   如果大于  
 看从头到尾的长度  即j-i+1    是否为最小
之后进入头部滑动  先在sum中剪掉 num【i】  之后  i--
 

3.螺旋矩阵

leetcode

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> A(n, vector<int>(n, 0));
        int startx , starty = 0;
        int count = 1;
        int num = n/2;
        int i , j = 0;
        int change = 1;
        while ( num-- ) {
            for ( j = starty ; j < n - change ; j++ ) {
                A[startx][j] = count++;
            }
            for ( i = startx ; i < n - change ; i++ ) {
                A[i][j] = count++;
            }
            for (  ; j > starty ; j-- ) {
                A[i][j] = count++;
            }
            for (  ; i > startx ; i-- ) {
                A[i][j] = count++;
            }
            startx++;
            starty++;
            change++;    
        }
        if ( n % 2 == 1 ) {
            A[num][num] = n *n ;
        } 
        return A;
    }
};

循环圈数为什么是n/2   可以就看第一行  第一圈是n 第二圈是n-2 第三圈是 n - 4 可以看出 一共可以转n/2圈 

采用左闭 右开 的数组循环 ,每次对于最后一个都不进行赋值 , 保持循环不变量 。

此题 对于 n  为奇数 形式 答案会报错 ,暂时看不出来, 求个大佬解答

 文章来源地址https://www.toymoban.com/news/detail-463016.html


到了这里,关于有序数组的平方 和 滑动窗口 和 螺旋矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 有序数组的平方、长度最小的子数组、螺旋矩阵II(Day2)

    题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/ 第一反应暴力如上代码 下面写一段用双指针思想的代码 题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/ 本题暴力解法会超时,以下采用滑动窗口的方式(将暴力的两个for循环变成一个) 题目链接:https://leetcode.cn/

    2023年04月26日
    浏览(42)
  • Day 2 数组:977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵Ⅱ

    977.有序数组的平方 题目链接 💡思路 暴力解法 将数组内每个数平方每个数平方之后,按升序排序 代码如下: 时间复杂度: O (   n l o g n ) O( nlogn) O (   n l o g n ) 空间复杂度: O ( 1 ) O(1) O ( 1 ) 时间复杂度具体分析: for循环: O(n) 快速排序 : O(nlogn) 因此时间复杂度是 O (  

    2024年02月10日
    浏览(53)
  • LeetCode977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    LeetCode977.有序数组的平方 思路:         双指针应用         因为数组是有序的,数组中可能存在负数,所以其平方的最大值只可能是数组的头或尾,因此可以定义两个指针,i指向头,j指向尾。同时定义一个新数组result,让k指向新数组的最后一个元素,当nums[i] * nums[i]

    2023年04月21日
    浏览(44)
  • 代码随想录day2|有序数组的平方、长度最小的子数组、螺旋矩阵

    前言:今天去校医院拔了两颗牙,太痛了,今天写的博客就比较水。 所谓滑动窗口,就是不断的调节 子序列的起始位置和终止位置 ,从而得出我们要想的结果。

    2024年02月01日
    浏览(49)
  • Day02 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

    https://leetcode.cn/problems/squares-of-a-sorted-array/ 时间复杂度O(n) https://leetcode.cn/problems/minimum-size-subarray-sum/ 时间复杂度:O(n) 看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。 空间复杂度

    2023年04月18日
    浏览(41)
  • 代码随想录第二天|977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵

    第二天开始了, 一开始自己写,就只想到了先一个个平方,再排序(甚至打算手写排序循环,后来才发现c++有自带的排序函数sort(a.begin(),a.end()),c++真好,加油努力学习c++。 第二种方法然后看提示用双指针也完全没想出来,只能看文章了,泪 写完发现代码乱七八糟,要改。

    2024年02月13日
    浏览(39)
  • Leetcode 977-有序数组的平方 | LeetCode209-长度最小的子数组 | Leetcode59-螺旋矩阵

    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 思考: 这个数组为有序数组,那么即使前面有负的,数组平方的最大值只能是在数组的倆端,不是在左边就是右边,不可能是在中间 由此想到双指针做法,left从

    2024年02月16日
    浏览(48)
  • 【C++代码】有序数组的平方,长度最小的子数组,螺旋矩阵 II--代码随想录

    题目:有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums ,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 题解 数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端, 不是最左边就是最右边,不

    2024年02月11日
    浏览(48)
  • 算法训练 Day 2 | 数组:977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

    977. 有序数组的平方 第一想法:暴力破解 看完题解想法:朝着双指针方向想 遇到困难: 用双指针的话,一开始想到两边指针往中间靠,逐个将最大值赋给结果数组。和题解不同的是,循环条件我写了  while (left != right) {...} ,相比于题解的  while (left = right) {...} ,我需要在后

    2023年04月12日
    浏览(47)
  • day2-数组part02| 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋矩阵II

    数组平方后的最大值只可能在数组两端,不可能在中间 设置双指针,比较两个指针所指值的大小,记录较大值,接着向中间移动这个指针 结束条件:左右指针相背 暴力一直不过,明天再补一下 不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。 思路 子数

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包