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;
}
}
最近做的都是之前做过几遍的题目,所以做起来还算得心应手,有点害怕后面没做过的题目压力会不会有点大,不过还是好好加油,不会的大不了就背呗,多做几遍会有感觉的。这两天的题目没有好好总结,这周天把这些都总结一下。
标签:977,right,nums,int,随想录,++,数组,ans,left From: https://www.cnblogs.com/12sleep/p/18284826