代码随想录算法训练营第二天(第43期) | 209.长度最小的子数组,59.螺旋矩阵II

題目難度狀態參考資料
209.长度最小的子数组Medium✔ 自己寫的時候碰到問題,看答案後已解決文章 影片
59.螺旋矩阵IIMedium✔ 使用Debugger除錯後立刻發現問題,看到AC成就感滿滿文章 影片

心得


今日總共花費時間: 通勤時間 1hrs + 3hrs

感覺刷題有兩個部分要學習

第一步是如何找到解決問題的演算法

第二步是將演算法化為程式碼

我目前都是看完題目後直接看大師兄的影片,然後自己想過之後,在筆記本先釐清一下後再coding

感覺目前一刷能夠完整的描述自己的演算法就很不錯了

看到AC時非常感動 明天繼續🔥

209.长度最小的子数组

第一次將

sum = sum - nums[left]; left++; 放到了if(len<minLeng)內 導致while無限迴圈

下列程式碼已經修正此問題

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int sum = 0;
        int minLeng = nums.length+1;
        for(int right = 0; right<nums.length;right++){
            sum = sum + nums[right];

            while(sum>=target){
                int len = right - left +1;
                if(len<minLeng){
                    minLeng = len;                    
                }
                sum = sum - nums[left];
                left++;
            }
        }
        if(minLeng>nums.length){
            return 0;
        }else{
            return minLeng;
        }
    }
}

59.螺旋矩阵II

下面程式是看了大師兄的影片後自己寫出來的

範例的程式碼簡潔的多😂

class Solution {
    public int[][] generateMatrix(int n) { 
        int startX = 0;       
        int startY = 0;
        int offset = 1;
        int i = 1;
        int[][] matrix = new int[n][n];
        for(int t = 0; t<n/2; t++){
            while(startY<n-offset){
                matrix[startX][startY] = i;
                startY++;
                i++;
            }
            while(startX<n-offset){
                matrix[startX][startY] = i;
                startX++;
                i++;
            }
            while(startY>offset-1){
                matrix[startX][startY] = i;
                startY--;
                i++;
            }
            while(startX>offset-1){
                matrix[startX][startY] = i;
                startX--;
                i++;                
            }
            offset++;
            startX++;
            startY++;
        }
        if(n%2==1){
            matrix[(n-1)/2][(n-1)/2] = n*n;
        }        
        return matrix;
    }
}

Array數組總結

在寫程式的時候一定要注意區間的範圍

快慢(雙)指標非常好用

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值