前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《剑指 offer》 21. 调整数组顺序使奇数位于偶数前面

《剑指 offer》 21. 调整数组顺序使奇数位于偶数前面

作者头像
五分钟学算法
发布2020-08-10 16:33:15
4360
发布2020-08-10 16:33:15
举报
文章被收录于专栏:五分钟学算法五分钟学算法

大家好,我是程序员吴师兄。

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题 21.调整数组顺序使奇数位于偶数前面,这道题目既可以使用 首尾双指针,也可以使用 快慢双指针,本文采用首尾双指针法。

题目链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/

一、题目描述

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

示例:

代码语言:javascript
复制
输入:nums = [1,2,3,4]
输出:[1,3,2,4] 
注:[3,1,2,4] 也是正确的答案之一。

提示:

代码语言:javascript
复制
1 <= nums.length <= 50000
1 <= nums[i] <= 10000

二、题目解析

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

三、动画描述

四、图片描述

五、参考代码

代码语言:javascript
复制
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/ 评论区
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目描述
  • 二、题目解析
  • 三、动画描述
  • 四、图片描述
  • 五、参考代码
  • 六、复杂度分析
    • 时间复杂度
      • 空间复杂度
      • 七、相关标签
      • 八、参考阅读
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档