首页 > 其他分享 >代码随想录刷题day 2 | 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋矩阵II

代码随想录刷题day 2 | 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋矩阵II

时间:2024-07-04 22:43:53浏览次数:22  
标签:977 right nums int 随想录 ++ 数组 ans left

977. 有序数组的平方

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] ans = new int[nums.length];
        int left = 0, right = nums.length - 1;
        for(int i = nums.length - 1; i>= 0; i--){
            if(nums[right] * nums[right] > nums[left] * nums[left]){
                ans[i] = nums[right] * nums[right]; 
                right--;
            }else{
                ans[i] =  nums[left] * nums[left];
                left++;
            }
        }
        return ans;
    }
}

76. 最小覆盖子串

哇这个题有点恶心的,倒不是思路难,主要还是java的map太难用了,之前用python写过这道题,当时没觉得有这么离谱;其实还可以再优化,但实在看不下去了,这次能写出来就不错了

class Solution {
    public String minWindow(String s, String t) {
        String ans = "";
        if(s.length() < t.length()) return ans;
        int[] cntS = new int[128];  //记录字串的字符
        int[] cntT = new int[128];  //记录target串字符
        for(char c: t.toCharArray()){
            cntT[c]++;
        }
        int left = 0, right = 0, aLeft = -1, aRight = s.length();
        char[] ss = s.toCharArray();
        for(; right < s.length(); right++){
            cntS[ss[right]]++;  //区间扩展需要给map中value更新
            while(isCovered(cntS, cntT)){
                if(right - left < aRight - aLeft){  // 如果新的字符串长度小于之前最优的,则更新
                    aLeft = left;
                    aRight = right;
                }
                cntS[ss[left++]]--;  //区间收缩
            }
        }
        return aLeft == -1 ? "" : s.substring(aLeft, aRight+1);
    }

    public boolean isCovered(int[] cnt1, int[] cnt2){
        for(int i = 0; i < 128; i++){
            if(cnt1[i] < cnt2[i]) return false;
        }
        return true;
    }
}

59. 螺旋矩阵 II

这道题看过一个非常好的题解,多温习温习,这类题应该就不会出错了

class Solution {
    public int[][] generateMatrix(int n) {
        int l = 0, r = n-1, u = 0, d = n-1;
        int i = 1;
        int[][] ans = new int[n][n];
        while(i <= n * n){
            for(int j = l; j <= r; i++, j++){
                ans[u][j] = i;
            }
            u++;
            for(int j = u; j <= d; i++, j++){
                ans[j][r] = i;
            }
            r--;
            for(int j = r; j >= l; i++, j--){
                ans[d][j] = i;
            }
            d--;
            for(int j = d; j >= u; i++, j--){
                ans[j][l] = i;
            }
            l++;
        }
        return ans;
    }
}

最近做的都是之前做过几遍的题目,所以做起来还算得心应手,有点害怕后面没做过的题目压力会不会有点大,不过还是好好加油,不会的大不了就背呗,多做几遍会有感觉的。这两天的题目没有好好总结,这周天把这些都总结一下。

标签:977,right,nums,int,随想录,++,数组,ans,left
From: https://www.cnblogs.com/12sleep/p/18284826

相关文章

  • 数据库MyBatis传递数组或集合
    应用场景假设你有两个表,一个是商品信息表(表1,例如商品类别信息),另一个是库存信息表(表2,记录每种商品的库存数量)。你想知道特定几个商品类别(通过其ID标识,这里是1、2、3)的所有商品的总库存量。这个查询就会非常有用,它不仅能够跨表根据商品类别ID筛选出相关商品,还能计算出这些商......
  • 代码随想录算法训练营第四十九天 | 300.最长递增子序列
    300.最长递增子序列题目链接文章讲解视频讲解动规五部曲:dp[i]:表示考虑元素i的最长子序列为dp[i]递推公式:dp[i]=max(dp[j]+1,dp[i]);初始化:dp[i]=1;每个元素单独算一个子序列长度为1遍历顺序:从前向后遍历打印dp数组classSolution{public:intlength......
  • 指针数组与数组指针(超详细!!!)
    指针数组秘诀:括号优先,先右后左,由近及远        指针数组是一个数组,其中每个元素都是一个指针。指针数组可以用于存储指向不同数据类型的指针,例如字符、整数或结构体等。int*p[n];//定义了一个指针数组,数组大小为n,数组中的每个元素都是一个int*指针 存储指向整......
  • 「代码随想录算法训练营」第二天 | 数组 part2
    977.有序数组的平方题目建议:本题关键在于理解双指针思想题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/题目难度:简单文章讲解:https://programmercarl.com/0977.有序数组的平方.html视频讲解:https://www.bilibili.com/video/BV1QB4y1D7ep题目状态:通过......
  • Java 中Json中既有对象又有数组的参数 如何转化成对象
    1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象。首先......
  • 代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之
    454题拆成两块各自匹配化成两个O(n^2)运算1classSolution{2public:3intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){4//四个数组拆分成两块两块5unordered_ma......
  • 代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网
    344简单写个循环1classSolution{2public:3voidreverseString(vector<char>&s){4chartmp;5intlen=s.size();6for(inti=0;i<len/2;i++){7tmp=s[i];8s[i]=s[len-......
  • 代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串
    151以前写过很呆的写法但能用嘿1classSolution{2public:3stringreverseWords(strings){4//初始化变量5vector<vector<int>>data;//存储单词的起始地址和长度6stringans;//最终结果字符串7intnum=0;......
  • 代码随想录算法训练营第2天 | 数组滑动窗口、螺旋打印
    有序数组的平方。常规方法复习冒泡排序,也可以使用双指针。因为有序数组的平方,最大值一定在两侧,最小值在中间。可以两侧往中间收拢。2024年7月4日笔记:双指针法,两侧往中间逼近一定是从大到小,然后给res数组倒着填即可实现从小到大。题977.有序数组的平方classSolution{pub......
  • 让数组倒叙
    1.使用reverse()函数vararray=['我','喜','欢','你'];array.reverse();//输出:["你","欢","喜","我"]2.循环遍历一一使其倒序vararray=['我','喜','欢','你'];va......