● 今日学习的文章链接和视频链接
● 自己看到题目的第一想法
977.有序数组的平方
方法一:
思路:
- 先将数据所有数据平方
- 将数组排序
代码:
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int> res(nums.size(),0);for(int i=0; i<res.size(); i++){cout<<res[i]<<endl;}for(int i=0; i<nums.size(); i++){nums[i] = nums[i]*nums[i];cout<<nums[i]<<endl;}sort(nums.begin(), nums.end());return nums;}
};
方法二:
思路:
利用双指针,有序数组平方后两边最大,中间最小。
- 定义left =0; right = nums.size()-1;
- 新开一个数组res, 大小为nums.size(), 初始值为0, k指向res最后的下标;
- 比较nums[left]*nums[left] 与 nums[right]*nums[right] 的大小
- 大的放在res[k]的位置, k–,
- 返回 res;
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int>res(nums.size(), 0);int left = 0;int right = nums.size()-1;while(left<=right){for(int k = res.size()-1; k>=0; k--){if(nums[left]*nums[left] > nums[right]*nums[right]){res[k]=nums[left]*nums[left];left++;}else{res[k] = nums[right]*nums[right];right--;}}}return res;}
};