代码随想录算法训练营14期-Day2-数组part02
java学习网站
977. 有序数组的平方
实现代码
1.代码
- 暴力排序 O(n+nlogn)
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
//平方、排序
for(int i = 0;i < nums.size();i++){
nums[i] = nums[i] * nums[i];
}
sort(nums.begin(), nums.end());
return nums;
}
};
- 双指针法 O(n)
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left = 0,right = nums.size() - 1;
vector<int> ans(right+1,0);
while(left <= right){
for(int i = right;i >= 0;i--){
if(nums[left] * nums[left] > nums[right] * nums[right]){
ans[i] = nums[left] * nums[left];
left++;
}
else{
ans[i] = nums[right] * nums[right];
right--;
}
}
}
return ans;
}
};
2.bug
- 排序函数sort(nums.begin(), nums.end());
- 创建 vector ans(n);
实现代码
1.代码-滑动窗口
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int ans = INT_MAX;
int i = 0,sum = 0,strlen = 0;
for(int j = 0;j < nums.size();j++){
sum += nums[j];
while(sum >= target){
strlen = j - i + 1;
if(ans > strlen)
ans = strlen;
sum = sum - nums[i];
i++;
}
}
return ans == INT_MAX ? 0 : ans;
}
};
2.bug
- int最大值 INT_MAX;
- sum开始移动的终点j而不是i;
- 滑动即找到大于等于target滑动初始指针找最小长度
- 三元运算符要用英文符号?且隔开
实现代码
1.代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n,vector<int>(n,0));
int k = 1,x = 0,y = 0,round = 1;
int i,j;
int lop = n/2;
while(lop--){
i = x,j = y;
for(j = y; j < n - round; j++){
ans[i][j] = k++;
}
for(i = x; i < n - round ;i++){
ans[i][j] = k++;
}
for(;j > y; j--){
ans[i][j] = k++;
}
for(;i > x; i--){
ans[i][j] = k++;
}
round++;
x++;
y++;
}
if(n%2){
ans[n/2][n/2] = k;
}
return ans;
}
};
2.bug
- 模拟到后两个循环的时候就晕了,还是要设定规则来循环
- 需要 二刷 二维数组定义vector<vector> ans(n,vector(n,0))
总结
59题做的吃力,看评论可以再看其他人的解法。