代码随想录算法训练营二刷第二天25-03-10: 977. 有序数组的平方

  • 使用双指针方法,之所以这样考虑是因为最大值要么在最右侧,要么在数组的最左或右两侧(如果有负数的情况下)
  • 所谓双指针就是,一个指针指向数组最左侧,一个指针指向数组最右侧
  • 将这两个指针指向元素平方后来比较大小,将比较结果放入一个新的数组中
  • 为了表明在新数组中放入值的位置,还要定义一个指针来指向新数组的插入位置
  • 左右指针移动的条件就是
    • 如果左指针元素平方值大就移左指针
    • 如果右指针元素平方值大就移右指针
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int len = nums.size();
        int left_p = 0, right_p = len - 1;
        std::vector<int> result_vec;
        result_vec.resize(len);
        for (int left_p = 0, right_p = len - 1, insert_p = len - 1; left_p <= right_p; --insert_p) {
            int left_power = nums[left_p] * nums[left_p], right_power = nums[right_p] * nums[right_p];
            if (left_power >= right_power) {
                result_vec[insert_p] = left_power;
                ++left_p;
            } else {
                result_vec[insert_p] = right_power;
                --right_p;
            }
        }
        return result_vec;
    }
};
  • 代码对变量名的命名作了一些意义化处理,这样会导致有些冗长,但好处是见名知意
  • 这其中使用代码的提示功能,会让输入效率显著提升,所以变量名的长度反而不再是问题
  • 使用vim也可以使用ctrl + n来实现自动补齐功能
  • 自动补齐的一个缺点是,如果变量名头几个字母相同,就需要有再选择过程
  • 所以在给变量命名时,要考虑这个问题,让变量名尽量没有几个头字母相同的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值