当前位置: 首页 > news >正文

leetcode 977. Squares of a Sorted Array

题目描述

双指针法一

用right表示原数组中负数和非负数的分界线。

nums[0,right-1]的是负数,nums[right,nums.size()-1]是非负数。

然后用合并两个有序数组的方法。合并即可。

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int> res;int len = nums.size();res.reserve(len);int right = -1;for(int i =0;i <len;i++){if(right == -1 && nums[i] >=0)right = i;nums[i] = nums[i]*nums[i];}int left = right-1;if(right == -1){right = len;left = len -1;}while(left >= 0 && right < len){if(nums[left]<=nums[right]){res.push_back(nums[left--]);}else{res.push_back(nums[right++]);}}while(left>=0){res.push_back(nums[left--]);}while(right<len){res.push_back(nums[right++]);}return res;}
};

双指针法二

容易发现原数组中元素的绝对值从两端向中间减小。因此可以逆序确定res数组。

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int len = nums.size();vector<int> res(len,0);int left = 0;int right = len -1;int res_pos = len - 1;while(left <= right){if(abs(nums[left]) > abs(nums[right])){res[res_pos--] = nums[left]*nums[left];left++;}else{res[res_pos--] = nums[right]*nums[right];right--;}}return res;}
};

相关文章:

  • donet使用指定版本sdk
  • 硬件工程师面试常见问题(11)
  • Machine Learning HW1 report(Hongyi Lee)
  • [基础]详解C++模板类(完整实例代码)
  • 大鱼吃小鱼开源
  • 蓝桥杯Python案例
  • [蓝桥杯 2021 省 AB] 砝码称重 Java
  • Android12 Rom定制设置默认语言为中文
  • c++题目_P1027 [NOIP 2001 提高组] Car 的旅行路线
  • SALOME源码分析: Data Object Model
  • JavaScript学习教程,从入门到精通, jQuery 下拉菜单、显示隐藏元素及查找元素方法详解(32)
  • 如何将 VS Code 与 Linux 系统高效连接:从入门到进阶
  • 归因理论——AI与思维模型【87】
  • RAG技术完全指南(一):检索增强生成原理与LLM对比分析
  • 第 2.3 节: 基于 Python 的关节空间与任务空间控制
  • MATLAB中removedelay函数用法
  • Android短信监控技术实现:合法合规的远程采集方案
  • 【AI论文】ReasonIR:为推理任务训练检索器
  • 【Unity】一个UI框架例子
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第五模块·生态征服篇 —— 第十九章 Spring生态:从main函数到企业级开发
  • 龙翔被撤销南京市人大常委会主任职务,此前已被查
  • 海南机场拟超23亿元收购美兰空港控股权,进一步聚焦机场主业
  • 涉嫌严重违纪违法,57岁证监会副主席王建军被查
  • 张炜琳已任三明市委常委、宣传部部长
  • 俄罗斯纪念卫国战争胜利80周年阅兵式首次彩排在莫斯科举行
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使