每日一练 2024.5.10

题目:

        给定一个非负整数数组 nums,  nums 中一半整数是 奇数 ,一半整数是 偶数 。

对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。

示例 1:

输入:nums = [4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

示例 2:

输入:nums = [2,3]
输出:[2,3]

提示:

  • 2 <= nums.length <= 2 * 104
  • nums.length 是偶数
  • nums 中一半是偶数
  • 0 <= nums[i] <= 1000

进阶:可以不使用额外空间解决问题吗?

题解:

        这道题目的核心要求是将数组 nums 重新排列,使得数组中位于奇数位置的元素也是奇数,而位于偶数位置的元素也是偶数。即:

  • nums[0]nums[2]nums[4], ... 是偶数
  • nums[1]nums[3]nums[5], ... 是奇数

        这里的“位置”是基于编程语言中常用的从零开始计数的索引。

        我们可以通过一种简单的方法来实现这个要求:

  1. 初始化两个指针,evenIndex 和 oddIndex,分别用于追踪下一个应该放置的偶数和奇数的位置。
  2. evenIndex 从 0 开始,每次增加 2;oddIndex 从 1 开始,每次增加 2。
  3. 遍历数组 nums,根据当前元素是奇数还是偶数,我们放在相应的位置,并移动指针。
  4. 当两个指针都超出数组长度时,排序完成。

        考虑到进阶问题,即不使用额外空间进行排序,我们需要在原数组上进行操作。这样,我们可以在遇到不在正确位置的元素时,寻找并与其交换正确位置上的元素。 具体实现时,可以用循环或者递归的方式来进行。

代码:
class Solution {
    public int[] sortArrayByParityII(int[] nums) {
        int n = nums.length;
        int evenIndex = 0; // 初始化偶数位置指针
        int oddIndex = 1;  // 初始化奇数位置指针
        
        while (evenIndex < n && oddIndex < n) {
            // 同时找到错位的偶数和奇数,然后交换。
            if (nums[evenIndex] % 2 == 1 && nums[oddIndex] % 2 == 0) {
                // 交换偶数位置上的奇数和奇数位置上的偶数
                int temp = nums[evenIndex];
                nums[evenIndex] = nums[oddIndex];
                nums[oddIndex] = temp;
                evenIndex += 2;
                oddIndex += 2;
            } else {
                // 如果偶数位置正确,移动到下一个偶数位置
                if (nums[evenIndex] % 2 == 0) {
                    evenIndex += 2;
                }
                // 如果奇数位置正确,移动到下一个奇数位置
                if (nums[oddIndex] % 2 == 1) {
                    oddIndex += 2;
                }
            }
        }
        return nums; // 返回排序后的数组
    }
}
知识点概览:
  • 数组操作: 这是最基本也是最重要的知识点。代码中涉及到对数组的遍历和基于索引对数组元素的访问和修改。

  • 双指针技术: 双指针是一种常见的用于解决数组和链表问题的技术。在这个问题中,我们使用了两个指针(evenIndexoddIndex)来分别追踪下一个应放置偶数和奇数的位置。这两个指针按照不同的规则移动(一个跳两格,一个跳两格),分别处理偶数和奇数情况。

  • 奇偶性检查: 使用 % 模运算符检查一个数字的奇偶性。在代码中,num % 2 == 0用于检查数字是否为偶数,num % 2 == 1用于检查数字是否为奇数。

  • 条件控制: 使用 if-else 语句结构进行条件分支控制。代码中使用 if-else 来根据指针指向的元素的奇偶性决定是否进行交换,以及如何移动指针。

  • 循环控制: 使用 while 循环来重复检查和交换数组直至整个数组被正确排序。这里的循环确保了只要 evenIndex 和 oddIndex 指针未越界,就一直进行检查和可能的交换操作。

  • 变量交换: 通过使用临时变量 temp 来交换两个元素的值。这是基本的算法技巧,即使用 temp 存储一个元素的值,然后将另一个元素的值赋给这个元素,接着用 temp 的值更新另一个元素。

知识点类别详细描述
数组操作- 遍历数组。
- 基于索引对数组元素进行访问和修改。
双指针技术- 使用双指针(evenIndex 和 oddIndex)分别追踪偶数和奇数的位置。
- 指针按不同规则移动,分别处理偶数和奇数元素。
奇偶性检查- 使用 % 模运算符检查数字的奇偶性。
num % 2 == 0 检查偶数。
num % 2 == 1 检查奇数。
条件控制- 通过 if-else 语句进行条件分支控制。
- 依据元素的奇偶性决定是否交换元素,以及如何移动指针。
循环控制- 使用 while 循环,确保 evenIndex 和 oddIndex 指针未越界时,持续进行检查和交换操作。
变量交换- 使用临时变量 temp 交换两个元素的值。
- 通用的算法技巧来交换变量值。

2024.5.10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/612854.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day 29 MySQL的主从复制集群

一&#xff1a;主从复制 1.主从复制概念 什么是主从复制&#xff1a; ​ 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库 主从复制的作用&#xff1a; ​ 做数据的热备&#xf…

【Python 下载大量品牌网站的图片(一)】关于图片的处理和下载,吃满带宽,可多开窗口下载多个网站,DOS窗口类型

写作日期&#xff1a;2024.05.11 使用工具&#xff1a;Python 可修改功能&#xff1a;线程量、UA、Cookie、代理、存储目录、间隔时间、超时时间、图片压缩、图片缩放 默认功能&#xff1a;图片转换、断续下载、图片检测、路径处理、存储文件 GUI&#xff1a;DOS窗口 类型&…

K8s源码分析(二)-K8s调度队列介绍

本文首发在个人博客上&#xff0c;欢迎来踩&#xff01; 本次分析参考的K8s版本是 文章目录 调度队列简介调度队列源代码分析队列初始化QueuedPodInfo元素介绍ActiveQ源代码介绍UnschedulableQ源代码介绍**BackoffQ**源代码介绍队列弹出待调度的Pod队列增加新的待调度的Podpod调…

C++:week3:数据结构与算法

文章目录 (十一) 常用数据结构1.动态数组(1)模型(2).h与.c(3)实现 2.链表(1)模型(2)分类(3)基本操作(API)(4)实现(5)链表常见面试题(6)空间与时间 3.栈(1)模型(2)基本操作(3)实现(4)栈的应用 4.队列(1)模型(2)基本操作(API)(3)实现(4)队列的应用 5.哈希表(1)哈希表的提出原因(2…

支付宝小程序如何去除页面下拉回弹

描述&#xff1a;支付宝小程序页面下拉时会产生回弹&#xff0c;如果页面上有拖拽功能&#xff0c;会有影响 解决方法&#xff1a; 页面xx.config.js中设置&#xff1a;allowsBounceVertical: “NO” 官方文档&#xff1a;https://opensupport.alipay.com/support/FAQ/7110b5d…

什么是Jetpack

Jetpack Jetpack 是一套组件库、工具&#xff0c;可帮助开发人员遵循最佳做法&#xff0c;减少样板代码并编写可在 Android 版本和设备上一致工作的代码&#xff0c;以便开发人员可以专注于他们关心的代码 组成 主要包含四部分&#xff1a;架构&#xff08;Architecture&…

手写一个SPI FLASH 读写擦除控制器(未完)

文章目录 flash读写数据的特点1. 扇擦除SE&#xff08;Sector Erase&#xff09;1.1 flash_se 模块设计1.1.1 信号连接示意图&#xff1a;1.1.2 SE状态机1.1.3 波形图设计&#xff1a;1.1.4 代码 2. 页写PP(Page Program)2.1 flash_pp模块设计2.1.1 信号连接示意图&#xff1a;…

社交媒体数据恢复:快手、快手极速版

一、备份快手数据 登录快手账号&#xff1a;首先&#xff0c;打开快手APP&#xff0c;登录您的快手账号。 进入设置&#xff1a;在快手首页点击右上角的三条横线图标&#xff0c;进入设置页面。 数据备份&#xff1a;在设置页面找到“备份与恢复”选项&#xff0c;点击进入。…

【机器学习】 人工智能和机器学习辅助决策在空战中的未来选择

&#x1f680;传送门 &#x1f680;文章引言&#x1f512;技术层面&#x1f4d5;作战结构&#x1f308;替代决策选项&#x1f3ac;选项 1&#xff1a;超级战争&#xff08;Hyperwar&#xff09;&#x1f320;选项 2&#xff1a;超越OODA&#x1f302;选项 3&#xff1a;阻止其他…

【漏洞复现】用友U8-Cloud XChangeServlet XXE漏洞

0x01 产品简介 用友U8Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友U8 cloud /service/XChangeServlet接口存在XXE漏洞,未授权的攻击者可通过此漏洞获取数据库敏感信息,从而盗取服务器数据,造成服务器信…

API接口开发实现一键智能化自动抓取电商平台热销商品数据支持高并发免费接入示例

为了实现一键智能化自动抓取电商平台热销商品数据支持高并发免费接入&#xff0c;你可以使用Python编程语言和相关库&#xff08;如requests、BeautifulSoup等&#xff09;来开发一个API接口&#xff0c;也可以使用封装好的api接口获取&#xff0c;注册一个api账号获取key和sec…

代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、使用sonarqube的目的四、sonarqube流程五、docker快速搭建sonarqube六、sonarqube scanner的安装和使用七、sonarqube对maven项目进行分析八、sonarqube分析报告解析九、代码扫描规则定制十…

使用 AI Assistant for Observability 和组织的运行手册增强 SRE 故障排除

作者&#xff1a;Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通过本指南&#xff0c;你的 SRE 团队可以实现增强的警报修复和事件管理。 可观测性 AI 助手可帮助用户使用自然语言界面探索和分析可观测性数据&#xff0c;利用自动函数调用来请求、分析和可视化数据…

【二叉树算法题记录】二叉树的所有路径,路径总和——回溯

目录 257. 二叉树的所有路径题目描述题目分析cpp代码 112. 路径总和题目描述题目分析cpp代码 257. 二叉树的所有路径 题目描述 给你一个二叉树的根节点root &#xff0c;按任意顺序&#xff0c;返回所有从根节点到叶子节点的路径。 题目分析 其实从根节点往下走&#xff0c…

VM虚拟机安装调试(步骤如下图)

VM虚拟机安装调试 随着一顿安装操作&#xff0c;还有enter键敲下&#xff0c;出现如下界面。

从木匠到编程匠的传承

我的父亲在1906年出生于宁波北仑西岙村。年轻时他在老家从木匠学徒做起&#xff0c;学到了一手好技艺。 宁波乡下的老式雕花木床分为三弯、五弯、七弯等三种档次&#xff0c;其中七弯的做工最复杂。父亲说&#xff0c;他是会做七弯木床的。 上世纪三十年代&#xff0c;父亲举…

Spring Cloud Gateway 11种断言工厂

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spri…

商场综合体能源监管平台,实现能源高效管理

商场作为大型综合体建筑&#xff0c;其能源消耗一直是备受关注的问题。为了有效管理商场能耗&#xff0c;提高商场能源效率&#xff0c;商场综合体能源监管平台应运而生。 商场综合体能源监管平台可通过软硬件一起进行节能监管&#xff0c;硬件设备包括各种传感器、监测仪表和…

设置多用户远程登录windows server2016服务器

1、远程登录windows server 2016 运行—>mstsc—>远程IP地址—>用户和密码 2、远程windows服务器设置多用户策略 运行—>gpedit.msc->计算机配置—管理模板—windows组件—远程桌面服务—远程桌面会话主机----连接,如下图所示: 1、《限制连接的数量》设置为…

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…