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

news2024/10/3 6:31:44

思路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.coloradmin.cn/o/1471719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何优化小程序关键词,提高搜索结果排名

在数字化时代&#xff0c;小程序作为一种轻量级的应用形态&#xff0c;已成为用户获取信息、享受服务的重要渠道。然而&#xff0c;随着小程序数量的不断增加&#xff0c;如何在搜索结果中脱颖而出&#xff0c;成为了每一个小程序开发者需要面对的问题。其中&#xff0c;关键词…

LeetCode 0235.二叉搜索树的最近公共祖先:用搜索树性质(不遍历全部节点)

【LetMeFly】235.二叉搜索树的最近公共祖先&#xff1a;用搜索树性质&#xff08;不遍历全部节点&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公…

软硬协同设计下的飞天盘古,是如何降低存储系统开销的?

云布道师 经过十几年的技术演进&#xff0c;阿里巴巴已经实现了统一存储的目标——即以“飞天盘古”系统作为统一底座&#xff0c;通过标准化、服务化和开放化的方式建立了完整的存储产品和服务体系&#xff0c;服务广大内部和外部客户。 “万古乾坤心上辟&#xff0c;于令日…

x86使用execve执行一个elf文件并传递参数--代码思路分析

execve(const char *filename, char *const argv[ ], char *const envp[ ]) 视频教程以及实际代码可以看这一个教程 其他的需要的知识 GDT表 GDT表虚拟内存 页表 任务切换 fork实现 elf文件加载 这一个是一个Linux下面的标准接口 这一个的实际作用的是执行一个可执行文件 把当…

用最直观的方式解释:什么是零信任?

在网络安全领域&#xff0c;零信任&#xff08;Zero Trust&#xff09;是一种新兴的安全模型&#xff0c;旨在提高网络安全防御的效果。零信任的核心理念是不信任任何人或设备&#xff0c;即使是内部的用户或设备也不例外。这一概念可以通过一个简单易懂的故事来解释。 很久以…

Opencv(2)深浅拷贝与基本绘图(c++python

Opencv(2)深浅拷贝与基本绘图 文章目录 Opencv(2)深浅拷贝与基本绘图三、深浅拷贝四、HSV色域(1).意义(2).cvtColor()(3).inRange()(4).适应光线 三、深浅拷贝 浅拷贝是指当图像之间进行赋值时&#xff0c;图像数据并未发生复制&#xff0c;而是两个对象都指向同一块内存块。 …

NCDA视觉传达设计大赛终极攻略:助你斩获佳绩

第十二届全国高校未来设计师数字艺术设计大赛&#xff08;NCDA&#xff09; A类&#xff1a;视觉传达设计 参赛对象&#xff1a; 大学生小组&#xff1a;分①研究生组②本科生组③专科生组&#xff0c;三组分别进行评审 教师小组&#xff1a;普通高校教师&#xff0c;不分小…

森歌集成灶:以冠军标准打造健康厨房,为全民健康保驾护航

在2024年这个实施“十四五”规划的关键之年&#xff0c;健康话题无疑是公众最为关注的焦点之一。随着国家卫健委最新发布的《2022年中国居民健康素养监测情况》报告显示&#xff0c;我国居民健康素养水平稳步提升&#xff0c;厨电高端品牌森歌响应国策、顺应潮流将于2月27日-2月…

【Golang】Golang使用embed加载、打包静态资源文件

【Golang】Golang使用embed加载、打包静态资源文件 大家好 我是寸铁&#x1f44a; 总结了一篇Golang使用embed加载静态资源文件的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 事情是这样的&#xff1a;前不久&#xff0c;有同学问我,golang怎么把静态资源文件打包成一…

ReentrantLock详解-可重入锁-默认非公平

ReentrantLock是Java中的一个可重入锁&#xff0c;也被称为“独占锁”。它基于AQS&#xff08;AbstractQueuedSynchronizer&#xff09;框架实现&#xff0c;是JDK中提供的一种线程并发访问的同步手段&#xff0c;与synchronized类似&#xff0c;但具有更多特性。 ReentrantLo…

开发一套智慧工地系统需要多少钱?

智慧工地是智慧地球理念在工程领域的行业具现&#xff0c;是一种崭新的工程全生命周期管理理念。它运用信息化手段&#xff0c;通过三维设计平台对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生…

【Java程序员面试专栏 算法思维】五 高频面试算法题:贪心算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊贪心算法,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间买卖股票的最佳时机 II贪心算法遍历整个股票交易日价格列表 price,并执行贪心策…

如何使用群晖NAS中FTP服务开启与使用固定地址远程上传下载本地文件?

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

员工如何看待年终考

对于企业管理者来说&#xff0c;年终考是对员工一年的各种工作计划部署进行检查、评价和督查,是一种必要的、有效的考核方法&#xff0c;可以有效激发员工工作积极性&#xff0c;促进企业发展&#xff0c;但是年终考真的达到了这样的效果吗&#xff1f;企业员工又是怎样看待年终…

HuggingFists系统功能介绍(5)--环境资源

模型库 模型库用于管理由HuggingFists系统自己生成的或者外部导入的各种模型。如&#xff1a;HuggingFace网站提供的各类模型可导入该模块进行统一管理及部署。该功能目前在HuggingFists的社区版中并未提供。 环境管理 环境管理-工作节点 环境管理-服务配置 环境管理主要用于与…

网络安全“三保一评”深度解析

“没有网络安全就没有国家安全”。近几年&#xff0c;我国法律法规陆续发布实施&#xff0c;为承载我国国计民生的重要网络信息系统的安全提供了法律保障&#xff0c;正在实施的“3保1评”为我国重要网络信息系统的安全构筑了四道防线。 什么是“3保1评”&#xff1f; 等保、分…

docker小知识:linux环境安装docker

安装必要软件包&#xff0c;执行如下命令 yum install -y yum-utils device-mapper-persistent-data lvm2目的是确保在安装 Docker 之前&#xff0c;系统已经安装了必要的软件包和服务&#xff0c;以支持 Docker 的正常运行。设置yum源&#xff0c;添加Docker官方的CentOS存储…

虹科技术|PTP时钟源设备全攻略:从普通时钟到透明时钟的进阶之路

导读&#xff1a;在现代通信技术中&#xff0c;精确时间同步对于保障网络性能至关重要。PTP&#xff08;Precision Time Protocol&#xff09;时钟源设备作为实现高精度时间同步的关键组件&#xff0c;其配置和选择对于网络架构师和工程师来说至关重要。本文将探讨普通时钟和透…

【JS】事件绑定方法自带一个形参e“function(e)”,what is e?

在学习js的时候 我跳过了一部分章节的内容&#xff0c;导致现在学习react的时候很多内容都不知所措&#xff0c;因为这些教程都是建立在它认为你js所有内容都掌握的前提下&#xff0c;当然这是我自身的原因。需要反省。 下面是正题&#xff1a; 我们知道js有很多事件&#…

举个栗子!Quick BI 技巧(6):词云图的制作及应用

众所周知&#xff0c;在数据分析中&#xff0c;词云图常用来制作用户画像和用户标签&#xff0c;应用场景非常多。例如&#xff0c;我们可以对所有的产品名称进行分析。它可以很直观的告诉我们&#xff1a;哪些产品的销售额更突出&#xff0c;并且还可以通过词云与地图的数据联…