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;
}
}
最近做的都是之前做過幾遍的題目,所以做起來還算得心應手,有點害怕後面沒做過的題目壓力會不會有點大,不過還是好好加油,不會的大不了就背唄,多做幾遍會有感覺的。這兩天的題目沒有好好總結,這周天把這些都總結一下。