LeetCode977 有序数组的平方
题目链接
暴力破解——冒泡排序
vector<int> sortedSquares(vector<int>& nums) {
int n=nums.size();
for(int i=0; i<n; i++) nums[i] = nums[i]*nums[i];
for (int i=0; i<n; i++){
for (int j=n-1; j>i; j--){
if (nums[j] < nums[j-1]){
int temp = nums[j];
nums[j] = nums[j-1];
nums[j-1] = temp;
}
}
}
return nums;
}
双指针方法
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
int low = 0, high = n-1;
vector<int> ans(n);
int pos = n-1;
while (low <= high){
if (nums[low] * nums[low] < nums[high] * nums[high]){
ans[pos] = nums[high] * nums[high];
high--;
pos--;
}else{
ans[pos] = nums[low] * nums[low];
low++;
pos--;
}
}
return ans;
}
LeetCode209 长度最小的子数组
题目链接
初始思路——暴力破解
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
int low = 0, high = 0;
int sum = 0, step = 0;
int ans = INT_MAX;
while (high<n){
sum += nums[high];
step++;
if (sum >= target){
if (step < ans) ans = step;
low++;
high = low;
step = 0;
sum = 0;
} else{
high++;
}
}
if (ans == INT_MAX) return 0;
return ans;
}
代码
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
int low = 0, high = 0, sum=0;
int ans = INT_MAX;
while (high<n){
sum += nums[high];
while (sum >= target){
int step = high-low+1;
if (step < ans) ans = step;
sum -= nums[low++];
}
high++;
}
if (ans == INT_MAX) return 0;
return ans;
}
LeetCode59 螺旋数组
题目链接
代码
vector<vector<int>> generateMatrix(int n) {
int step=1, i=0;
int startx = 0, starty = 0;
vector<vector<int>> res(n,vector<int>(n));
int num = 1;
while ((n-2*step)>=0){
int i = startx;
int j = starty;
for (i=startx; i < n-step; i++){
res[startx][i] = num++;
}
for (j=starty; j < n-step; j++){
res[j][i] = num++;
}
for (; i>starty; i--) res[j][i] = num++;
for (; j>startx; j--) res[j][i] = num++;
starty++;
startx++;
step++;
}
if (n%2 != 0) res[n/2][n/2] = num;
return res;
}