分两种方法:
第二种方法注意点:
1.vector<int> result(nums.size(), 0); 最后一位是'/n',所以新建的容器大小是num.size();
//1.暴力解法
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;
}
};
//2.最大值一般就在容器的两端
//新建一个容器,将左右两段比较的最大值填到容器的最后一位
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size()-1;
vector<int> result(nums.size(), 0);
int i = 0;
int j = nums.size()-1;
while( i<=j ) {
if(nums[i]*nums[i] < nums[j]*nums[j]) {
result[k] = nums[j]*nums[j];
j--;
k--;
}else {
result[k] = nums[i]*nums[i];
i++;
k--;
}
}
return result;
}
};
深刻领会滑动窗口那个东西
//滑动窗口
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum = 0;
int i = 0;
int result = INT_MAX;
int length = 0;
for(int j = 0; j<nums.size(); j++) {
sum +=nums[j];
//深刻理解与领会while这个东西
while(sum >= target) {
length = j -i +1;
result = result < length ? result:length;
sum -=nums[i++];
}
}
return result == INT_MAX? 0:result;
}
};
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//注意新建一个n行n列的数组,不建会报错
vector<vector<int>> result(n,vector<int> (n));
int i = 1;
int left = 0, right = n-1, top = 0, bottem = n-1;
while(left<= right && top <= bottem){
for(int column = left; column <= right; column++)
result[top][column] = i++;
for(int row = top+1; row <= bottem; row++)
result[row][right] = i++;
if(left< right && top < bottem) {
for(int column = right-1; column > left; column--)
result[bottem][column] = i++;
for(int row = bottem; row > top; row--)
result[row][left] = i++;
}
top++;
bottem--;
right--;
left++;
}
return result;
}
};
是按照这个表格循环的