力扣随笔之按奇偶排序数组(简单905)

news/2024/6/19 6:19:20 标签: leetcode, 算法, 职场和发展

思路1:根据双指针对撞指针的思路,定义一个左指针从数组前端开始遍历,定义一个右指针从后端开始遍历,这时候有四种情况

  1. 左奇右偶:这种情况需要将其位置交换,将偶数提前,奇数后移
  2. 左奇右奇:这种情况需要右指针遍历下一个
  3. 左偶右偶:这种情况需要左指针遍历下一个
  4. 左偶右奇:这种情况需要左指针和右指针分别遍历下一下

当左指针遇到右指针时排序完成

class Solution {
    public int[] sortArrayByParity(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        while(left < right){
            if(nums[left] % 2 == 0 && nums[right] % 2 == 0){
                left++;
            }else if(nums[left] % 2 == 0 && nums[right] % 2 == 1){
                left++;
                right--;
            }else if(nums[left] % 2 == 1 && nums[right] % 2 == 1){
                right--;
            }else{
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
            }
        }
        return nums;
    }
}

思路二:优化解法,定义一个指针(下标)从头开始遍历,定义一个指针(下标)指向数组最后一个数,当左指针遇见奇数则将其与右指针指向的数做交换,右指针自减,左指针不变,这样右指针右边的数一定是奇数;继续判断左指针指向的数是否为奇数,若为奇数,则与右指针指向的数做交换,右指针再次自减,有点类似于滑动窗口,右指针右边的数全为奇数;若左指针为偶数,则左指针自加,右指针不变

当左指针与右指针相撞时,遍历结束

举例

        1 4 7 3 2 9 5  8 红色加粗数字即现在左指针所指的数字,黑色加粗数字即为右指针指向的数字,左指针现在指向的数为奇数,交换左右指针的数字,并右指针自减,左指针不变

        8 4 7 3 2 9 5 1  左指针所指为偶数,左指针自加,右指针不变

        8 4 7 3 2 9 5 1  

        8 4 7 3 2 9 5 1

        8 4 5 3 2 9 7 1

        8 4 9 3 2 5 7 1

        8 4 2 3 9 5 7 1

        8 4 2 3 9 5 7 1 当这时左指针和右指针相撞,遍历结束,排序也结束

Java实现:

class Solution {
    public int[] sortArrayByParity(int[] nums) {
        int tempEnd = nums.length - 1;
        for(int i = 0;i < tempEnd;i++){
            if(nums[i] % 2 == 1){
                int temp = nums[i];
                nums[i--] = nums[tempEnd];
                nums[tempEnd--] = temp;
            }
        }
        return nums;
    }
}


http://www.niftyadmin.cn/n/5388456.html

相关文章

【kubernetes】二进制部署k8s集群之master节点和etcd数据库集群(上)

目录 前言&#xff1a;关于整个k8s集群的主机规划以及本文部署架构 步骤一&#xff1a;完成操作系统初始化配置 步骤二&#xff1a;完成etcd集群部署 关于etcd集群 ①准备签发证书环境 ②先完成单独一个节点的部署 ③通过部署好的etcd01节点 完成另外两个节点的部署 拓展…

Hive【内部表、外部表、临时表、分区表、分桶表】【总结】

目录 Hive的物种表结构特性 一、内部表 建表 使用场景 二、外部表 建表:关键词【EXTERNAL】 场景&#xff1a; 外部表与内部表可互相转换 三、临时表 建表 临时表横向对比​编辑 四、分区表 建表&#xff1a;关键字【PARTITIONED BY】 场景&#xff1a; 五、分桶表 …

天洑AIFEM软件将助力竞技机器人国际冠军战队再攀高峰

2023年底&#xff0c;烈鹏战队作为中国顶尖机器人队伍代表出征国际赛事Battle of Robots&#xff0c;经过与全球战队激烈竞争&#xff0c;取得国际赛场上5连胜的优秀战绩斩获国际冠军。 天洑智能结构仿真软件AIFEM与玄智科技的技术方案联合&#xff0c;基于烈鹏战队的冠军机器人…

kali xrdp

Kali Linux 使用远程桌面连接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp远程桌面黑屏/空屏/无画面解决办法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

分班问题 、幼儿园分班(C语言)

题目 幼儿园两个班的小朋友排队时混在了一起&#xff0c;每个小朋友都知道自己跟前面一个小朋友是不是同班&#xff0c;请你帮忙把同班的小朋友找出来 小朋友的编号为整数&#xff0c;与前面一个小朋友同班用Y表示&#xff0c;不同班用N表示 输入 输入为空格分开的小朋友编号…

【八、hyperf项目随docker容器自动启动,无需进入容器手动启动项目】

hyperf项目随docker容器自动启动 项目准备运行的容器进入容器查看项目访问效果开始准备工作(这个项目随容器自动启动,不需要刚才进入项目的手动敲命令了)先创建一个文件夹,名字随意,我这里是提示文件夹已存在了进入文件夹,先准备写一个sh的脚本命令,后面会用到的然后就是…

力扣基础刷题---二分查找

704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 中心思想&#xff1a;找到中间值&#xff0c;跟中间值比…

【Git】:标签功能

标签功能 一.标签操作二.推送远程标签 标签 tag &#xff0c;可以简单的理解为是对某次commit的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项⽬发布某个版本的时候&#xff0c;针对最后⼀次commit起⼀个v1.0这样的标签来标识⾥程碑的意义。这有什么⽤呢&…