[自我记录]随想录刷题第二天 | 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

这篇具有很好参考价值的文章主要介绍了[自我记录]随想录刷题第二天 | 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 代码随想录打卡第二天, 新手自我记录一下刷题历程, 仅为自我打卡使用.

今天刷了三道主题, 第一道双指针和第三道模拟做出来了, 第二道写出了暴力解法但是提交leetcode超时了, 测试用例过了18/20, 看了carl哥答案以后自己重新补写了滑动窗口方法.


977. 有序数组的平方

简单题, 要求时间复杂度O(n), 考虑使用双指针.

观察到数组为有序数组, 可能有负数.

建立一个与输入等长的新数组作为容器, 双指针分别指向输入数组的两端, 不断比较指针所指的元素的平方值的大小, 将较大的一端放入新容器并移动指针位置.

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

209.长度最小的子数组
 

暴力解法时间复杂度O(n^2), 即对每个可能的起点都找一遍满足条件的最小子数组长度.

据说leetcode更新数据以前是能过的.

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int min_len = nums.size() + 1;
        for (int i = 0; i < nums.size(); ++i){
            int sum = 0;
            int len = nums.size() + 1;
            for (int j = i; j < nums.size(); ++j){
                sum += nums[j];
                if (sum >= target){
                    len = j - i + 1;
                    break;
                }
            }
            if (len < min_len){
                min_len = len;
            }
        }
        if (min_len != nums.size() + 1){
            return min_len;
        }
        else{
            return 0;
        }
    }
};

滑窗: 一个for循环, 每个元素进入和退出窗口时各操作一次, 时间复杂度O(2n) = O(n)

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {

        int min_len = nums.size() + 1;
        int sum = 0;
        int sub_len = nums.size() + 1;
        // start i, end j
        int i = 0;

        for (int j = 0; j < nums.size(); ++j){
            sum += nums[j];
            while (sum >= target){
                sub_len = j - i + 1;
                sum -= nums[i];
                i++;
            }
            if (sub_len < min_len){
                min_len = sub_len;
            }
        }

        if (min_len != nums.size() + 1){
            return min_len;
        }
        else {
            return 0;
        }

    }
};

59.螺旋矩阵II

循环不变量, 写的时候思路和标准答案稍有一点点区别, 想的是在每条新边上走几步, 代码看起来比答案乱一点.

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> result(n, vector<int>(n, 0));
        int start_idx = 0;
        int num = 1;
        int count = 0;

        for (int i = n; i > 0; i-=2){
            for (int j = start_idx; j < start_idx + i - 1; ++j){
                result[start_idx][j] = num;
                num++;
            }
            for (int j = start_idx; j < start_idx + i - 1; ++j){
                result[j][i-1+start_idx] = num;
                num++;
            }
            for (int j = start_idx; j < start_idx + i - 1; ++j){
                result[i-1+start_idx][i+2*count-1-j] = num;
                num++;
            }
            for (int j = start_idx; j < start_idx + i - 1; ++j){
                result[i+2*count-1-j][start_idx] = num;
                num++;
            }
            start_idx++;
            count++;
        }

        if (n % 2 == 1){
            result[n/2][n/2] = num;
        }

        return result;
    }
};

另外看leetcode网站大神题解中有一种上下左右移边界的题解做法感觉更助于理解, 更有美感.


数组部分的主干题目刷完啦! 撒花!

明天开始链表!文章来源地址https://www.toymoban.com/news/detail-454801.html

到了这里,关于[自我记录]随想录刷题第二天 | 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 代码随想录刷题第6天|哈希表 LeetCode242、LeetCode349、LeetCode202、LeetCode1

    1、LeetCode242 有效的字母异位词 题目链接:242、有效的字母异位词 用哈希表,record[s[i]-\\\'a\\\']++,record[t[i]-\\\'a\\\']--,最后判断record里是否有元素不为0。 2、LeetCode349、两个数组的交集 题目链接:349、两个数组的交集 题目如果没有限制数值的大小,就无法使用数组来做哈希表。如果哈

    2024年02月06日
    浏览(49)
  • 代码随想录刷题第48天|LeetCode198打家劫舍、LeetCode213打家劫舍II、LeetCode337打家劫舍III

    1、LeetCode198打家劫舍 题目链接:198、打家劫舍 1、dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i] 。 2、递推公式: 如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ; 如果不偷第i房间,那么dp[i] = dp[i - 1]; 然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1

    2024年02月08日
    浏览(38)
  • 【代码随想录刷题记录】 392.判断子序列 、 115.不同的子序列

    1、题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一个子序列,而\\\"aec\\\"不是)。 题目链接:https://leetcode.cn/problems/is-subsequence/ 2、代码

    2024年02月16日
    浏览(36)
  • 【代码随想录刷题记录】 203.移除链表元素 、 707.设计链表 、206.反转链表

    题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/ 代码 小结 该题主要注意链表删除的操作以及在特殊情况下如何进行操作。特殊情况包括头结点为目标

    2024年02月08日
    浏览(33)
  • 代码随想录第二十二天

    题目链接 : 二叉搜索树的最近公共祖先 自己的思路 :乍一看和二叉树的最近公共祖先类似,使用那个题的代码确实可以写出来,但是没有利用到二叉搜索树的性质;我们可以找出p和q结点值的较大者和较小者,遍历整个二叉树,如果出现了某个结点值位于两者之间,就是我们

    2024年02月16日
    浏览(35)
  • 代码随想录Day02:977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    977.有序数组的平方 【 题目建议 】: 本题关键在于理解双指针思想 【随想录文章讲解】 【卡哥视频讲解】 方法一:暴力排序法 **思路:**先对数组中每个数进行平方运算,然后再排序 时间复杂度是 O(n + nlogn) 其中包括计算平方数组的O(n)和快速排序的O(nlogn),总体上是O(nlo

    2023年04月27日
    浏览(41)
  • 代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量

    代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量 一、695. 岛屿的最大面积 题目链接:https://leetcode.cn/problems/max-area-of-island/ 思路:典型的遍历模板题,我采用深度优先,每块岛屿递归遍历的时候计数,递归完比较大小记录最大值。 二、1020. 飞地的数量 题目链接

    2024年02月07日
    浏览(41)
  • 代码随想录刷题

    704. 二分查找 27. 移除元素

    2024年01月25日
    浏览(32)
  • 【代码随想录】刷题Day31

    455. 分发饼干 贪心的思路就是:小的饼干尽量去匹配胃口小的孩子,这样才能实现尽可能多孩子吃到。 那么代码就很好写了: 1.排序g和s,这样方便查找小的数 2.饼干的位置不停遍历,对应我们需要一个ret代表当前孩子位置 3.如果当前位置为孩子的数量,说明ret记录下所有的

    2024年02月06日
    浏览(25)
  • 【代码随想录】刷题Day41

    343. 整数拆分 1.dp数组的含义:第i个就表示当前i能被拆分出相乘最大的整数 2.那么其实,所谓的后续的i对应的相乘最大整数其实就是前面的相乘最大整数拼凑而成,为了更好的区分我们将分离出来的数为j,那么我们的工作就是将一个又一个的j从i中剥离出,随后相乘即可。那

    2024年02月07日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包