训练题目
题目 | 链接 |
---|---|
977. 有序数组的平方 | 传送门. |
189. 轮转数组 | 传送门. |
978. 救生艇 | 传送门. |
979. 按奇偶排序数组 | 传送门. |
633. 平方数之和 | 传送门. |
题解
977. 有序数组的平方
1.普通方法
代码简单,但效率低下
class Solution {
public:
vector<int> sortedSquares(vector<int>& a) {
int len=a.size();
vector<int>b;
for(int i=0;i<len;i++)
b.push_back(a[i]*a[i]);
sort(b.begin(),b.end());
return b;
}
};
2.双指针解决,效率高
class Solution {
public:
vector<int> sortedSquares(vector<int>& a) {
int len=a.size();
vector<int>b(len);
int l=0,r=len-1;
while(r>=l)
{
int m=a[r]*a[r];
int n=a[l]*a[l];
if(m>n)
{
b[len-1]=m;
len--;
r--;
}
else
{
b[len-1]=n;
len--;
l++;
}
}
return b;
}
};
189. 轮转数组
class Solution {
public:
void rotate(vector<int>& a, int k) {
int len=a.size();
vector<int>b(len);
for(int i=0;i<len;i++)
{
b[(i+k)%len]=a[i];
}
a.assign(b.begin(),b.end());
}
};
881. 救生艇
class Solution {
public:
int numRescueBoats(vector<int>& a, int limit)
{
int len=a.size();
sort(a.begin(),a.end());
int cnt=0;
int min=0;
int max=len-1;
while(min<=max)
{
if(a[max]+a[min]<=limit)
{
min++;
max--;
cnt++;
}
else
{
max--;
cnt++;
}
}
return cnt;
}
};
905. 按奇偶排序数组
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
vector<int>a;
int len=nums.size();
a.resize(len);
int j=0;
for(int i=0;i<len;i++)
{
if(nums[i]%2==0)
a[j++]=nums[i];
}
for(int i=0;i<len;i++)
{
if(nums[i]%2!=0)
a[j++]=nums[i];
}
return a;
}
};
633. 平方数之和
class Solution {
public:
bool judgeSquareSum(int c) {
long i = 0, j = sqrt(c);
while (i <= j)
if (i * i + j * j == c) return true;
else if (i * i + j * j > c) j --;
else i ++;
return false;
}
};