Day2-数组
题目
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int len = nums.size();
int j =0;
nums[0]*=nums[0];
for (int i = 1; i < len; i++) {
int temp = nums[i]*nums[i];
j = i -1 ;
while (j >= 0 && nums[j] > temp) {
nums[j + 1] = nums[j];
j--;
}
nums[j + 1] = temp;
}
return nums;
}
};
不是正解,但是这道题我认为可以理解为排序的一种,因此可以使用插入排序法进行排序,当然排序的方法有许多尤其是针对vector
——排序法
但是这导致时间用时过长。还是得用双指针;
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size());
int k = nums.size()-1;
for(int i=0,j=nums.size()-1;i<=j;)
{
if(nums[i]*nums[i]>nums[j]*nums[j])
{
result[k--] = nums[i]*nums[i];
i++;
}
else
{
result[k--] = nums[j]*nums[j];
j--;
}
}
return result;
}
};
209.长度最小的子数组
暴力解法超时了
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
vector<int> result(nums.size(),0);
int out =nums.size()+1;
for(int i=0;i<nums.size();i++)
{
int sum = 0;
for(int j=i;j<nums.size();j++)
{
sum +=nums[j];
if(sum >= target)
{
nums[i] = j-i+1;
if(nums[i]<out)
{
out = nums[i];
}
}
}
}
return out==nums.size()+1?0:out;
}
};
滑动模块解法
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = nums.size()+1;
int i=0;
int sum = 0;
for(int j=0;j<nums.size();j++)
{
sum += nums[j];
while(sum>=target)
{
int subl = j-i+1;
result = subl<result?subl:result;
sum -= nums[i];
i++;
}
}
return result==nums.size()+1?0:result;
}
};
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int startx = 0, starty = 0;
int loop = n / 2;
int mid = n / 2;
int count = 1;
int offset = 1;
int i,j;
while (loop --) {
i = startx;
j = starty;
for (j = starty; j < n - offset; j++) {
res[startx][j] = count++;
}
for (i = startx; i < n - offset; i++) {
res[i][j] = count++;
}
for (; j > starty; j--) {
res[i][j] = count++;
}
for (; i > startx; i--) {
res[i][j] = count++;
}
startx++;
starty++;
offset += 1;
}
if (n % 2) {
res[startx][starty] = count;
}
return res;
}
};
这个题有点混乱得再看几遍。