第十天
我使用的C++,错误的地方请见谅,文章初衷仅用来督促本人学习,如果恰巧能够给你带来帮助,我会十分开心。
一、977. 有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
//非递减就是相等或递增,先对每一个元素进行平方,然后非递减排序,sort函数即可实现
vector<int> ans;
for (auto i : nums){
ans.push_back(i * i);
}
sort(ans.begin(), ans.end());
return ans;
}
};
这里还有官方给的第二种揭发解法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
int neg = -1;
for (int i = 0; i < n; i++){
if (nums[i] < 0){//找到neg的分界线
neg = i;
}
else{
break;
}
}
vector<int> ans;
int i = neg, j = neg + 1;
while (i >= 0 || j < n){//直到两边边排完为止
if (i < 0){
ans.push_back(nums[j] * nums[j]);
j++;
}
else if (j == n){
ans.push_back(nums[i] * nums[i]);
i--;
}
else if (nums[i] * nums[i] < nums[j] * nums[j]){
ans.push_back(nums[i] * nums[i]);
i--;
}
else if (nums[i] * nums[i] > nums[j] * nums[j]){
ans.push_back(nums[j]* nums[j]);
j++;
}
else if (nums[i] * nums[i] == nums[j] * nums[j]){
ans.push_back(nums[j]* nums[j]);
j++;
ans.push_back(nums[i] * nums[i]);
i--;
}
}
return ans;
}
};
归并排序
二、189. 轮转数组
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
需要知道的是(i+k)mod n就是元素的新位置
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size(); vector<int> ans(n);
for (int i = 0; i < n; i++){
ans[(i + k) % n] = nums[i];
}
nums.assign(ans.begin(), ans.end());
//return ans;
}
};