977. 有序数组的平方 - 力扣(LeetCode)
将数组中元素先平方再进行排序。这样时间复杂度为nlogn。
class Solution
{
int sortedSquares(vector& nums)
{
for(int i=0;i
主要思想是因为数组中肯定包含的有负数,所以需要分别从数组的两头进行取值,由于是升序排列所以需要
新数组的新下标要从数组的最后一个进行。
class Solution
{
int sortedSquare(vector& nums)
{
int k = nums.size()-1;//定义新数组的下标
int i = 0;
int j=nums.size()-1;
vector result(nums.size());
for(i,j;i<=j;)
{
if(nums[i]*nums[i]>nums[j]*nums[j])
{
result[k] = nums[i]*nums[i];
k--;
i++;
}
else
{
result[k] = nums[j]*nums[j];
k--;
}
}
return reslut;
}
};
class Solution
{
int minSubArrayLen(int target,vector&nums)
{
int i=0;
int j=0;//定义滑动窗口的末位置
int result =nums.size()+1;//自己定义一个合适的初始值最后再筛选一下
int sum=0;//定义求和值
for(int j=0;j=target)//寻找大于等于目标值的最小子数组
{
minSubarrL = j-i+1;//计算子数组长度
result = min(result,minsubarrL);//取最小值
i++;//向后遍历找最小子数组
}
}
if(result<=nums.size())//最后再筛选一下
{
return result;
}
else
{
return 0;
}
}
};
核心思想:
终止位置的选择和初始位置是怎么进行选择的才能达到选择到最小子数组的目的。
这个题目多注意边界处理即可参考二分法
class Solution {
public:
vector> generateMatrix(int n) {
int loop = n/2;
int startx = 0;//起始行位置
int starty = 0;//起始列位置
int count = 1;//计数处理进行填充
int offset=1;//先处理边界值
vector> matrix(n,vector(n, 0));
int i=0;
int j=0;
while(loop--)
{
i = startx;
j = starty;
for(j;jstartx;j--)
{
matrix[i][j]=count;
count++;
}
for(i;i>starty;i--)
{
matrix[i][j]=count;
count++;
}
startx++;
starty++;
offset++;
}
if(n%2)
{
matrix[n/2][n/2]=count;
}
return matrix;
}
};