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