- 使用双指针方法,之所以这样考虑是因为最大值要么在最右侧,要么在数组的最左或右两侧(如果有负数的情况下)
- 所谓双指针就是,一个指针指向数组最左侧,一个指针指向数组最右侧
- 将这两个指针指向元素平方后来比较大小,将比较结果放入一个新的数组中
- 为了表明在新数组中放入值的位置,还要定义一个指针来指向新数组的插入位置
- 左右指针移动的条件就是
- 如果左指针元素平方值大就移左指针
- 如果右指针元素平方值大就移右指针
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
来实现自动补齐功能 - 自动补齐的一个缺点是,如果变量名头几个字母相同,就需要有再选择过程
- 所以在给变量命名时,要考虑这个问题,让变量名尽量没有几个头字母相同的