文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个下标从 0 开始的整数数组 nums ,数组长度为 偶数 ,由数目相等的正整数和负整数组成。

你需要 重排 nums 中的元素,使修改后的数组满足下述条件:

  • 任意 连续 的两个整数 符号相反
  • 对于符号相同的所有整数,保留 它们在 nums 中的 顺序 。
  • 重排后数组以正整数开头。

重排元素满足上述条件后,返回修改后的数组。

示例 1:
输入:nums = [3,1,-2,-5,2,-4]
输出:[3,-2,1,-5,2,-4]
解释:
nums 中的正整数是 [3,1,2] ,负整数是 [-2,-5,-4] 。
重排的唯一可行方案是 [3,-2,1,-5,2,-4],能满足所有条件。
像 [1,-2,2,-5,3,-4]、[3,1,2,-2,-5,-4]、[-2,3,-5,1,-4,2]
这样的其他方案是不正确的,因为不满足一个或者多个条件。 示例 2:
输入:nums = [-1,1]
输出:[1,-1]
解释:
1 是 nums 中唯一一个正整数,-1 是 nums 中唯一一个负整数。
所以 nums 重排为 [1,-1] 。提示:
2 <= nums.length <= 2 * 10^5
nums.length 是 偶数
1 <= |nums[i]| <= 10^5
nums 由 相等 数量的正整数和负整数组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rearrange-array-elements-by-sign
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 双指针找到第一个正数和负数
  • 分别往后挪动
class Solution {public:vector<int> rearrangeArray(vector<int>& nums) {int pos = -1, neg = -1, n = nums.size();for(int i = 0; i < n; ++i){if(pos==-1 && nums[i] > 0)pos = i;if(neg==-1 && nums[i] < 0)neg = i;if(pos!=-1 && neg!=-1)break;}vector<int> ans(n);for(int i = 0; i < n; ++i){ans[i] = (i%2==0) ? nums[pos++] : nums[neg++];while(i%2==0 && pos<n && nums[pos]<0)pos++;while(i%2==1 && neg<n && nums[neg]>0)neg++;}return ans;}
};

192 ms 121 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2149. 按符号重排数组(双指针)相关推荐

  1. java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面

    LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入 ...

  2. Python Leetcode(905.按奇偶排序数组)

    Python Leetcode(905.按奇偶排序数组) 给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例 ...

  3. LeetCode笔记:原地修改数组

    LeetCode笔记:原地修改数组 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  4. LeetCode简单题之有序数组中出现次数超过25%的元素

    题目 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%. 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10 ...

  5. LeetCode实战:删除排序数组中的重复项

    题目英文 Given a sorted array nums, remove the duplicates in-place such that each element appear only on ...

  6. leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置

    给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置 leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置 示例: 输入: [0 ...

  7. LeetCode 303. 区域和检索 - 数组不可变(前缀和)

    1. 题目 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求 ...

  8. c#中的long类型示例_C#中带示例的无符号字节数组

    c#中的long类型示例 C#中的无符号字节数组 (Unsigned Byte Array in C#) In C#.Net, we can create an unsigned byte array ...

  9. 【LeetCode】面试题 03. 数组中重复的数字

    [LeetCode]面试题 03. 数组中重复的数字 文章目录 [LeetCode]面试题 03. 数组中重复的数字 一.遍历数组 二.原地置换 总结 一.遍历数组 由于只需要找出数组中任意一个重复的 ...

最新文章

  1. 大数据时代的数据管理
  2. js array push 添加内容
  3. ubuntu for nvidia-drivers for AI
  4. android 处理双击事件
  5. ElasticSearch 2 (7) - 基本概念
  6. 科目二倒车入库不论怎么都能入进去的方法
  7. IDEA中创建类时,自动在文件头中添加作者以及创建时间
  8. SVN移植、合库、分库
  9. python get 函数-python的__get__、__set__、__delete__(1)
  10. java 随机数算法_Java随机数算法原理与实现方法实例详解
  11. 完美修改证件照背景详细步骤,可以消除边界处的白边或者红边
  12. 15 个面向深度学习爱好者的开放数据集
  13. python 字符串结束符_python字符串以反斜杠结尾
  14. linux查看告警日志,linux怎么查看硬件告警
  15. 数据库MySQL经典面试题之SQL语句
  16. 学校计算机用房地面用什么材料,学校食堂地面防滑该用什么材料?
  17. sws_getContext和sws_scale分析
  18. 装机不求人,10 分钟电脑配置挑选速成攻略
  19. leetcode | 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
  20. 2012年扑克牌训练日记之一

热门文章

  1. 解决:build_attrs() takes at most 2 arguments (3 given)
  2. Log 日志的使用与重要性
  3. pycharm之no python interpreter configured for project的解决办法
  4. resin指定java版本_resin的几个常用配置
  5. Linux:守护进程详解及实现
  6. shopify在哪里填写html,[Shopify开店教程]添加嵌入代码
  7. android关机分区卸载,Android关机重启流程(二)
  8. java动态交叉表,SqlServer如何生成动态交叉表查询
  9. nmcli 命令的基本使用
  10. 图表相同数据会自动合并问题(finereport)