首页 > 其他分享 >力扣---剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

力扣---剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

时间:2023-03-31 19:11:36浏览次数:31  
标签:p2 偶数 p1 21 nums int Offer --- 数组

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

 

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
 

提示:

0 <= nums.length <= 50000
0 <= nums[i] <= 10000

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

如果修改原数组的话用双指针,交换数组两边的奇数和偶数。

如果是新建一个nums数组,那么还是双指针,只不过是把遍历到的奇数添加到左指针,遍历到的偶数添加到右指针。

class Solution {
    public int[] exchange(int[] nums) {
        int p1 = 0;
        int p2 = nums.length - 1;
        while (p1 < p2) {
            // 找到从左边开始第一个偶数
            while (p1 < p2 && nums[p1] % 2 != 0) {
                p1 ++;
            }
            // 找到从右边开始第一个偶数
            while (p2 > p1 && nums[p2] % 2 == 0) {
                p2 --;
            }
            // 将找到的偶数和奇数互换(如果p1 == p2,则相当于本身互换,还是不影响,但可以减少一次if判断。)
            int tem = nums[p1];
            nums[p1] = nums[p2];
            nums[p2] = tem;
        }
        // 此处修改了原数组。
        return nums;
    }
}

class Solution {
    public int[] exchange(int[] nums) {
        int p1 = 0;
        int p2 = nums.length - 1;
        int[] res = new int[nums.length];
        for (int x : nums) {
            if (x % 2 == 0) {
                res[p2--] = x;
            } else {
                res[p1++] = x;
            }
        }
        return res;
    }
}

 

标签:p2,偶数,p1,21,nums,int,Offer,---,数组
From: https://www.cnblogs.com/allWu/p/17277246.html

相关文章

  • mongodb--数据库操作与集合操作
    一、数据库操作1、新建数据库和切换数据库useDATABASE_NAME--DATABASE_NAME创建数据库的名字--如果刚创建完数据库,使用查看命令后没有的话,其实因为里面没有数据,所以才看不到2、查看所有数据库--查看所有数据库showdbs--查看当前数据库db 3、删除数据库--删除......
  • python写入文件时,编码方式为utf-8,在pycharm种正常显示中文,但是用excel打开就乱码
    python写入文件时,编码方式为utf-8,在pycharm种正常显示中文,但是用excel打开就乱码解决办法:explore.to_csv(resultfile,encoding='utf-8-sig')encoding='utf-8-sig’因为python编码方式为utf-8,但是是无BOM格式的,excel软件,其对于utf-8编程方式,只支持有BOM格式的,所以会出现中文......
  • LIDC-IDRI肺结节项目 -- 预处理数据集
    实战参考代码:代码一、路径、参数配置(lung.conf)lidc_dicom_path:LIDC_IDRI数据集原始位置 image_path,mask_path:保存处理后的含有结节的肺部图像和掩码图像路径clean_path_image,clean_path_mask:保存处理后的不含有结节的肺部图像和掩码图像路径meta_path:保存结节元......
  • Codeforces Gym 103931F - Forest of Magic(时间轴分块+线段树合并)
    一个巨烦的时间轴分块做法,有点类似于P2137Gty的妹子树先考虑静态的情况。看上去就一脸线段树合并对吧?一次修改的操作对一个点\(x\)贡献可以写成\(k·dep_x+b\)的形式,开两棵线段树合并维护一次项和零次项系数即可。由于静态问题可做,因此考虑时间轴分块。设阈值\(B\),每\(B......
  • MATLA 5G工具箱---
    基于MATLABR2022b版软件学习!DeepLearningforWirelessCommunications视频链接:https://www.mathworks.com/videos/deep-learning-for-wireless-communications-1625082196426.htmlGood morning, ladies and gentlemen. My name is Houman Zarrinkoub. I ......
  • Python的match-case语法
    Python3.10版本在2021年10月发布,新增了match-case语法。其实就是对应别的开发语言的switch-case语法。 例子defhttp_error(status):matchstatus:case400:print("Badrequest")case404:print("Notfound")case......
  • SB-RocketMQ-Provider-Consumer20230331
     一、生产者1、pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.rocketmq</groupId>......
  • chatGPT----链接大全
      OpenAI:https://openai.com/blog/chatgpt/百度文心:https://wenxin.baidu.com/CSDN(调用text-davinci-003模型):https://so.csdn.net/so/chatNewBing:https://www.bing.com/newChatGPT官网:https://chat.openai.comChatGPT注册:https://ata.alibaba-inc.com/articles/253211......
  • 【深入浅出 Yarn 架构与实现】6-1 NodeManager 功能概述
    本节开始将对Yarn中的NodeManager服务进行剖析。NodeManager需要在每个计算节点上运行,与ResourceManager和ApplicationMaster进行交互。管理节点的计算资源以及调度容器。后续将对NM的功能职责、状态机、容器生命周期和资源隔离等方面进行讲解。本篇将从整体上对NM......
  • CISP-PTE靶场通关思路分享-SQL注入篇
    pte靶场中包含5道web题SQL注入首先打开本地搭建的网址,发现我们需要利用SQL注入对/tmp/360/key文件进行读取,读取该文件需要使用load_file()函数,该函数是MySQL中常见内置函数。   进入答题后,发现由当前执行的SQL语句,按照当前执行的SQL语句对SQL语法进行闭合 1http:/......