題目 | 難度 | 狀態 | 參考資料 |
---|---|---|---|
209.长度最小的子数组 | Medium | ✔ 自己寫的時候碰到問題,看答案後已解決 | 文章 影片 |
59.螺旋矩阵II | Medium | ✔ 使用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數組總結
在寫程式的時候一定要注意區間的範圍
快慢(雙)指標非常好用