day2-1. 911有序数组的平方
通过花费的时间:00:03:00 总结整理吃透这道题总共花费的时间: 00:17:00 看到题目的第一想法: ①平方+快排:时间复杂度O(n+nlogn) +空间复杂度O(logN)②双指针+额外数组:时间复杂度O(n)+空间复杂度O(n) 解题过程中遇到的问题:比较顺畅一气呵成 此题收获:给自己一个信念,相信坚持的力量,拖了几天的任务,后面加油赶回来
class Solution {
public int [ ] sortedSquares ( int [ ] nums) {
for ( int i = 0 ; i < nums. length; i++ ) {
nums[ i] = nums[ i] * nums[ i] ;
}
Arrays . sort ( nums, 0 , nums. length- 1 ) ;
return nums;
}
public int [ ] sortedSquares ( int [ ] nums) {
int right = nums. length - 1 ;
int left = 0 ;
int result[ ] = new int [ nums. length] ;
int index = nums. length - 1 ;
while ( left<= right) {
if ( nums[ right] * nums[ right] > nums[ left] * nums[ left] ) {
result[ index] = nums[ right] * nums[ right] ;
index -- ;
right-- ;
} else {
result[ index] = nums[ left] * nums[ left] ;
index-- ;
left++ ;
}
}
return result;
}
}
day2-2. 209长度最小的子字符串
通过花费的时间:00:18:00(做题的过程写注释有点慢) 总结整理吃透这道题+博客总共花费的时间: 00:26:59 看到题目的第一想法: 模糊记得是做过,但是还是达不到一气呵成的水平,看了一下视频才更深的理解了该题 解题过程中遇到的问题:①注意点:滑动窗口的启示位置和终止位置;while处是持续移动 ②写题过程中出现的错误:我人傻了把for写成if,报错还看老一会儿 此题收获:给自己一个信念,相信坚持的力量,拖了几天的任务,后面加油赶回来,加油 !
class Solution {
public int minSubArrayLen ( int target, int [ ] nums) {
int left = 0 ;
int sum = 0 ;
int result = Integer . MAX_VALUE ;
for ( int right = 0 ; right < nums. length; right++ ) {
sum += nums[ right] ;
while ( sum >= target) {
result = Math . min ( result, right - left + 1 ) ;
sum -= nums[ left] ;
left++ ;
}
}
return result == Integer . MAX_VALUE ? 0 : result;
}
}
day2-3. 59螺旋矩阵||
通过花费的时间:00:37:56(做题的过程写注释有点慢,但是对于辅助写代码还是很有必要的) 总结整理吃透这道题+博客总共花费的时间: 00:43:42 看到题目的第一想法: 模糊记得是做过,但是还是达不到一气呵成的水平,(看了一下视频才更深的理解了该题,自己完整敲下来才真正的通畅了)。 解题过程中遇到的问题: ①临界问题:循环不变量法则,每次循环的起止保证循环次数相同,起止相同 ②变量问题:loop、count、i、j都是公共变量才能保证持续性 此题收获:给自己一个信念,相信坚持的力量,拖了几天的任务,后面加油赶回来,加油 ,加油
class Solution {
public int [ ] [ ] generateMatrix ( int n) {
int loop = 0 ;
int [ ] [ ] result = new int [ n] [ n] ;
int count = 1 ;
int start = 0 ;
int i, j;
while ( loop++ < n/ 2 ) {
for ( j = 0 ; j < n - loop; j++ ) {
result[ start] [ j] = count++ ;
}
for ( i = 0 ; i < n - loop; i++ ) {
result[ i] [ j] = count++ ;
}
for ( ; j >= loop; j-- ) {
result[ i] [ j] = count++ ;
}
for ( ; i >= loop; i-- ) {
result[ i] [ j] = count++ ;
}
start++ ;
}
if ( n% 2 == 1 ) {
result[ n/ 2 ] [ n/ 2 ] = count;
}
return result;
}
}
数组
基础知识
二分查找
移除元素
长度最小的数组
最小覆盖子串
旋转数组||