在线题目链接:调整数组顺序使奇数位于偶数前面

文章目录

  • 1 题目描述
  • 2 题目分析
    • 2.1 方法1
      • 2.11 Java代码
      • 2.12 C++代码
    • 2.2 方法2
      • 2.21 Java代码
      • 2.22 C++代码
  • 3 总结

1 题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

2 题目分析

2.1 方法1

这道题很简单,常规的做法是开一个数组arr,遍历两边原数组,第一遍找到所有的奇数,依次存入arr,第二遍找到所有的偶数,依次存到arr。

注意:如果这道题没有要求奇数和奇数,偶数和偶数之间的相对位置不变,则可以使用前后两个指针向中间遍历,前指针遇到偶数则与后指针的数交换,同理后指针遇到奇数则与前指针的数交换

2.11 Java代码

import java.util.ArrayList;
import java.util.List;
public class Solution {public void reOrderArray(int [] array) {List<Integer> arr = new ArrayList<Integer>();for(int i=0;i<array.length;i++){if(array[i]%2==1)arr.add(array[i]);}for(int i=0;i<array.length;i++){if(array[i]%2==0)arr.add(array[i]);}for(int i=0;i<array.length;i++)array[i]=arr.get(i);}
}

2.12 C++代码

class Solution {public:void reOrderArray(vector<int> &array) {vector<int> arr;int size=array.size();for(int i=0;i<size;i++){if(array[i]%2==1)arr.push_back(array[i]);}for(int i=0;i<size;i++){if(array[i]%2==0)arr.push_back(array[i]);}array.swap(arr);}
};

2.2 方法2

实际上,这道题的解法,还可以使用类似于冒泡排序的算法,只不过在这里当我们遇到相邻两个数的前一个数为偶数后一个数为奇数时,就交换两数。(这与冒泡排序中前一个数大于后一个数则交换很相似,所以称为类冒泡法)

这种方法也很好写,直接写两个for循环即可,注意数组不要越界即可

2.21 Java代码

public class Solution {public void reOrderArray(int [] array) {for(int i = 0;i < array.length;i++){for(int j = 0;j< array.length-i-1;j++){if(array[j]%2==0&& array[j+1]%2==1){int t = array[j];array[j]=array[j+1];array[j+1]=t;}}}}
}

2.22 C++代码

class Solution {public:void reOrderArray(vector<int> &array) {for(int i = 0;i < array.size();i++){for(int j = 0;j< array.size()-i-1;j++){if(array[j]%2==0&& array[j+1]%2==1){int t = array[j];array[j]=array[j+1];array[j+1]=t;}}}}
};

还可以使用C++STL中的stable_partition函数:

class Solution{public:static bool cmp(int n){  return ((n & 1) == 1); }void reOrderArray(vector<int> &array){stable_partition(array.begin(),array.end(),cmp); //把奇数排在前面}
};

3 总结

注意考虑交换后奇数与奇数,偶数与偶数的相对位置保持不变。

探讨学习加:
个人qq:1126137994
个人微信:liu1126137994

【剑指offer - C++/Java】13、调整数组顺序使奇数位于偶数前面相关推荐

  1. 剑指Offer - 面试题21. 调整数组顺序使奇数位于偶数前面(双指针,原地算法)

    1. 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4 ...

  2. 剑指offer面试题[14]-调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 分析: 这个题目的最 ...

  3. 剑指offer面试题21. 调整数组顺序使奇数位于偶数前面(双指针)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路 详见链接 代码 class Solution:def exchan ...

  4. 【剑指offer-Java版】14调整数组顺序使奇数位于偶数前面

    调整数组顺序使奇数位于偶数前面:遍历交换 特殊输入: 1) 只有一个数字 2) 全奇数或者全偶数 3) 空指针 4) 正常输入 考虑到扩展性,C++里面使用了函数指针来实现,但是对于java,可以采用 ...

  5. 【剑指offer】21、调整数组顺序使奇数在偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分. 思路一 从前往后扫描数组,遇到一个偶数就把它放到数组末尾,并且把之后 ...

  6. 剑指Offer #13 调整数组顺序使奇数位于偶数前面 | 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的 ...

  7. JAVA实现调整数组顺序使奇数位于偶数前面问题(《剑指 offer》)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. public c ...

  8. 面试 6:调整数组顺序使奇数位于偶数前面

    今天给大家带来的是 <剑指 Offer>习题:调整数组顺序使奇数位于偶数前面,纯 Java 实现希望大家多加思考. 面试题:输入一个整型数组,实现一个函数来调整该数组中的数字的顺序,使得所 ...

  9. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java

    <LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...

最新文章

  1. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)
  2. 如何免费(轻成本)在网上做推广宣传
  3. Zencart获取PayPal PDT Token参数教程方法
  4. memcached 高可用工具 memcached-ha
  5. Android之用户定位(二)
  6. 一头扎进Node系列 - 目录
  7. angular js创建表单_如何优雅的使用 Angular 表单验证
  8. Appfuse下载及安装步骤
  9. 链接mysql_JavaScript学习笔记(二十四)-- MYSQL基础操作
  10. Hustoj mdui Web界面修改
  11. finecms存在任意文件上传漏洞复现
  12. 《卓有成效的管理者》读书笔记(二)——卓有成效是可以学会的
  13. linux+4k+桌面壁纸,Ubuntu 20.04 LTS Focal Fossa 高清晰 4K 默认壁纸来了
  14. Java日志文档怎么写
  15. 已安装visual studio 如何添加新模板和组件
  16. 用Cufflinks计算差异表达
  17. 视觉和imu(惯性传感器)( 一)
  18. strncpy()函数详解
  19. 假设检验:p-value,FDR,q-value
  20. Arduino+DHT11温湿度传感器+12864oled显示温湿度

热门文章

  1. 高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )
  2. 项目管理(5):备战pmp
  3. arm-none-eabi-gcc 嵌入式交叉编译器安装 极简教程
  4. display:table-cell自适应布局下连续单词字符换行
  5. 基于 opencv 的图像处理入门教程
  6. 使用计算机仿真的作用是什么,计算机仿真及其在制造业中的应用
  7. selenium定位元素的方法_selenium定位元素之冻结窗口
  8. 优麒麟桌面闪烁_稳定性持续增强,优麒麟 19.10.1 发布
  9. 知乎问答:现在程序员的工资是不是被高估了?
  10. java基础——equals及==的区别