977.有序数组的平方 本来我的想法是找到正负分界线,然后双指针往两边找,
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int i=0,j;
int n=nums.size();
while(i<n&&nums[i]<0)
{
i++;
}
j=i;
i--;
vector<int > ans;
while(j<n&&i>=0)
{
if(nums[i]+nums[j]<0)
{
ans.push_back(nums[j]*nums[j]);
j++;
}
else if(nums[i]+nums[j]>0)
{
ans.push_back(nums[i]*nums[i]);
i--;
}
else
{
ans.push_back(nums[j]*nums[j]);
ans.push_back(nums[i]*nums[i]);
j++;i--;
}
}
while(i>=0)
{
ans.push_back(nums[i]*nums[i]);
i--;
}
while(j<n)
{
ans.push_back(nums[j]*nums[j]);
j++;
}
return ans;
}
};
正想着边界判断好麻烦,想骂街时 更牛逼的双指针出现了
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int i=0,j=nums.size()-1;
int n=nums.size()-1,s=nums.size();
vector<int > ans(s);
while(i<=j)
{
if(nums[i]+nums[j]>0)
{
ans[n--]=nums[j]*nums[j];
j--;
}
else
{
ans[n--]=nums[i]*nums[i];
i++;
}
}
return ans;
}
};
不仅和前一种一样逻辑清晰,而且代码量少,而且少一步判断,速度也上去了。感受到算法的魅力了!!!
|