专栏首页五分钟学算法写了一道双指针,我飘了~

写了一道双指针,我飘了~

一、题目描述

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

示例:

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

提示:

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

二、题目解析

  • 定义头指针 left ,尾指针 right
  • left 一直往右移,直到它指向的值为偶数
  • right 一直往左移, 直到它指向的值为奇数
  • 交换 nums[left]nums[right]
  • 重复上述操作,直到 left == right 为止

三、动画描述

四、图片描述

面试题KeyNote.002

面试题KeyNote.003

面试题KeyNote.004

面试题KeyNote.005

面试题KeyNote.006

面试题KeyNote.007

面试题KeyNote.008

面试题KeyNote.009

面试题KeyNote.010

面试题KeyNote.011

面试题KeyNote.012

面试题KeyNote.013

面试题KeyNote.014

面试题KeyNote.015

面试题KeyNote.016

面试题KeyNote.017

五、参考代码

class Solution {
    public int[] exchange(int[] nums) {
        // 定义头指针 left ,尾指针 right ,临时变量 tmp 
        int left = 0, right = nums.length - 1, tmp;
        
        //重复操作,直到 left == right 为止
        while(left < right) {
            // nums[left] & 1 与 nums[right] & 1 都是用来判断数字奇偶性。
            // left 一直往右移,直到它指向的值为偶数
            while(left < right && (nums[left] & 1) == 1) left++;
      // right 一直往左移, 直到它指向的值为奇数
            while(left < right && (nums[right] & 1) == 0) right--;
         
            // 交换 nums[left] 和 nums[right]*
            tmp = nums[left];
            nums[left] = nums[right];
            nums[right] = tmp;
        }
        return nums;
    }
}

六、复杂度分析

时间复杂度

时间复杂度为 O(N) ,其中 N 为数组 nums 的长度。

空间复杂度

空间复杂度为 O(1)

七、相关标签

  • 链表
  • 双指针

八、参考阅读

  • https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/ti-jie-shou-wei-shuang-zhi-zhen-kuai-man-shuang-zh/
  • https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/ 评论区

本文分享自微信公众号 - 五分钟学算法(CXYxiaowu),作者:程序员吴师兄

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 访谈 | 赛道一双周冠军:我不是TFboy,所以新写了baseline

    4月30日,2021腾讯广告算法大赛初赛已经正式拉开帷幕。2021腾讯广告算法大赛由腾讯广告主办,腾讯云AI、腾讯大数据、腾讯招聘、腾讯高校合作以及英伟达联合主...

    腾讯智能钛AI开发者
  • 是时候给你的鼠标指针更换样式换下风格体验了!如何卸载与安装鼠标指针?

    偶然翻了下网盘整理了一下存的文件以及资料,发现自己有存有鼠标指针文件,感觉样式还不错,就仔细的去搜索学习了一下,当然自己也学到了不少这方面的一些东西。后面又发现...

    FreeRonin
  • 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手

    最近有一位小姐姐向我抱怨,说她家宝宝最近要打预防针,受疫情影响,市区定点的社康医院太少,导致预约号基本靠抢,根本是一号难求

    AirPython
  • 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手

    最近有一位小姐姐向我抱怨,说她家宝宝最近要打预防针,受疫情影响,市区定点的社康医院太少,导致预约号基本靠抢,根本是一号难求

    AirPython
  • 应对双11,我帮她写了一个自动下单脚本

    本文主要介绍一种定时自动下单的技术实现。脚本为女神而写,希望双十一能帮到她享受更高的优惠,进而看到她的笑容。

    后端技术探索
  • 一道好题!我觉得面试如果考察「双指针」的话,这题是刚刚好 ...

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?

    宫水三叶的刷题日记
  • PHP中的文件系统函数(三)

    总算来到我们最关心的部分了,也就是 f 相关函数的操作。基本上大部分的文件操作都是以今天学习的这些内容为基础的,话不多说,我们就一个一个的来学习学习吧。

    硬核项目经理
  • 香飘飘还能绕地球一圈吗?

    智研咨询数据显示,2015年中国冲泡奶茶市场规模已出现负增长;2016年有所复苏,增速达到17.1%;2017、2018年,增速再度下滑至个位数2.4%、5%。...

    iCDO互联网数据官
  • 我花了一年时间研究不确定性估算,写下了这份最全指南

    为什么立下这个flag?因为我在各种大会上听腻了人们争论每个月微件(widget)的数量是上升还是下降,或者微件方法X是否比微件方法Y更有效率。

    大数据文摘
  • 盯着双11开喵铺里的小人许久,我也写了一个!cocos creator !

    ◇ 打开支付宝,天猫双11合伙人全面开喵铺的活动映入眼帘。点击进去后,我竟然盯着小人走路许久,琢磨着,自己也写个玩玩吧!

    白玉无冰
  • 凤凰系统新版发布:适配手游吃鸡,王者荣耀智能施法准上加准

    少年吃鸡么?游戏助手现已适配「荒野行动」和「小米枪战-实战模式」,并添加了预置键位。有了键盘鼠标,操作稳稳当当,「吃鸡手游操作太飘」不存在的。 ? 游戏助手针对...

    BestSDK
  • 我花了一周,总结了一份Java学习/面试自测指南!200+道Java最常见面试题!

    另外,准备面试的小伙伴,一定要根据自身情况制定好复习计划! 并且,你最好还要时不时自测一下,对着一些面试常见的问题进行自问。

    Guide哥
  • 数学,原来可以这么美!

    导读:法国著名艺术家罗丹曾说:世界中从不缺少美,而是缺少发现美的眼睛。对于我们的眼睛,不是缺少美,而是缺少发现。如果我们能够用数学的眼光来观察世界,又将会是怎样...

    华章科技
  • 数学,原来可以这么美!

    今天给大家带来一波视觉享受,感受数学之美!文末也将送出一本吴军老师的《数学之美》。

    朱小五
  • 2020技术总结

    口口声声的减肥大业终于还是荒废了,工作近六年,庆幸的是发量还可以(PS:可能是技术能力不达标)。

    merlinfeng
  • 晚上看了轮子哥的知乎想法,我失眠了

    昨晚在刷知乎的时候,无意间看到这样一个动态,vczh(人称轮子哥)惊叹有生之年第一次在 LeetCode 刷题时 Faster than 100%。

    五分钟学算法
  • python实现雪花飘落效果实例讲解及源码分享!

    Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取...

    python学习教程
  • 「镁客·请讲」图灵机器人郭家:多数AI玩家还在飘,他们需要考虑如何“接地气”

    镁客网
  • 从猫扑看互联网发展(壹零零)

    各位,今天应资深读者的要求,插入本系列最后一集,说说VR为什么突然就这么火起来了,背后是什么力量再推动VR的发展?

    Leoo Bai

扫码关注云+社区

领取腾讯云代金券