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

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

思路:这道题应该是考察排序的,相对位置不变意味着排序算法要稳定

但是如果允许额外开辟空间的话,只需新建一个数组,将原数组的奇数放到新数组前面,偶数放到后面,便可以达到时间复杂度O(n),空间复杂度O(N)

那么,先来开个数组,暴力解下:

 1 public class Solution {
 2     public void reOrderArray(int [] array) {
 3      int oddStart=0;
 4      int count=0;
 5      int []a=new int[array.length];
 6      for(int i=0;i<array.length;i++){
 7          if((array[i]&1)==1) count++;
 8      }
 9       for(int i=0;i<array.length;i++){
10           if((array[i]&1)==1)a[oddStart++]=array[i];
11           else{
12               a[count++]=array[i];
13           }
14       }
15         for(int i=0;i<array.length;i++){
16          array[i]=a[i];
17      }
18     }
19 }

思路:用类似于插入排序的思想,先寻找第一个奇数,从该奇数的位置往前找,只要有偶数出现,就交换这两个数的位置

对于插入排序,最坏情况需要N^2/2 次比较和N^2/2次交换

最好情况需要N-1次比较和0次交换

 1 public class Solution {
 2     public void reOrderArray(int [] array) {
 3         int odd=0;int even=0;
 4         for(int i=1;i<array.length;i++){
 5            if((array[i]&1)==1){
 6             for(int j=i;j>0;j--){
 7                 if((array[j-1]&1)!=1){
 8              int tmp=array[j];
 9             array[j]=array[j-1];
10             array[j-1]=tmp;
11             }
12             }
13         }
14         }
15     }
16 }

看了下排名靠前的算法,下面这种毫无算法思想而言的解法居然也能排进前十

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 public class Solution {
 4     public void reOrderArray(int [] array) {
 5         List<Integer>ls1=new ArrayList<Integer>();
 6         List<Integer>ls2=new ArrayList<Integer>();
 7         for(int i=0;i<array.length;i++){
 8             if(array[i]%2==1){
 9                 ls1.add(array[i]);
10             }
11             else {
12                 ls2.add(array[i]);
13             }
14         }
15         ls1.addAll(ls2);
16         for(int i=0;i<array.length;i++){
17             array[i]=ls1.get(i);
18         }
19     }
20     }

排名第一的,居然是冒泡,是测试的数据量不够大么

 1 public class Solution {
 2     public void reOrderArray(int [] array) {
 3        for(int i= 0;i<array.length-1;i++){
 4             for(int j=0;j<array.length-1-i;j++){
 5                 if(array[j]%2==0&&array[j+1]%2==1){
 6                     int t = array[j];
 7                     array[j]=array[j+1];
 8                     array[j+1]=t;
 9                 }
10             }
11         }
12     }
13 }

转载于:https://www.cnblogs.com/pathjh/p/9139375.html

剑指offer-调整数组顺序使奇数位于偶数前面相关推荐

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

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

  2. 剑指offer-99.调整数组顺序使奇数位于偶数前面

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

  3. 剑指offer0JZ81 调整数组顺序使奇数位于偶数前面(二)(C++,附思路)

    描述 输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对 ...

  4. 【LeetCode笔记】剑指 Offer 21-. 调整数组顺序使奇数位于偶数前面(Java、双指针)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 有点像快排的交换操作 思路 & 代码 类似快排中的找法,具体见代码注释 class Solution {public int[] e ...

  5. 【双100%解法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    立志用最少的代码做最高效的表达 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4] 输 ...

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

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

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

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

  8. 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...

  9. 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面

    剑指offer--面试题14:调整数组顺序使奇数位于偶数前面 Solution1: 顺序交换,比较好的算法!!! class Solution { public:void reOrderArray(v ...

  10. 剑指offer:面试题21. 调整数组顺序使奇数位于偶数前面

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

最新文章

  1. 三关节机械臂控制需求说明压缩文件中的相关文档说明
  2. pyqt Qlabel显示opencv 自适应大小
  3. 项目Beta冲刺——凡事预则立
  4. consume_skb 和 kfree_skb的区别
  5. optee中utee syscall的实现(系统调用实现)
  6. 对象的当前状态使该操作无效 说明: 执行当前 Web 请求期间,出现未处理的异常。...
  7. 连破四次吉尼斯世界纪录!厨师界再出神人,用一公斤拉面缔造了一代传奇,背后却是简单的原理……
  8. mysql严格模式 报错_mysql严格模式
  9. 截取台风后的图片_Python数据分析案例 | 台风最喜欢在我国哪个省市登陆
  10. 5G网络出来以后,家里面的宽带还有存在的必要吗?
  11. winpythonhadoop_win10下配置hadoop2.9(使用python单机运行任务)
  12. display:none与visible:hidden的区别 ?
  13. IOS开发之Bug--关于UIImageView的使用
  14. 计算机硬件设备税率,软件产品增值税即征即退税额的计算
  15. Python 实现PPPOE自动拨号
  16. 生成对抗网络的判别器_生成对抗网络的随机天气发生器
  17. 未能加载文件或程序集“Newtonsoft.Json解决方法
  18. 37岁,感觉上班太累,可做这5个生意,年轻人看不上,但却挺赚钱
  19. 捡了西瓜丢芝麻——注意编程细节
  20. 凌晨4点的中国人都在干什么?这份数据可视化地图给你答案

热门文章

  1. 【C语言入门教程】3.4 循环控制语句
  2. android studio 各种问题
  3. Solr配置与简单Demo[转]
  4. Linux下防御arp***的方法
  5. Android网络连接判断与处理
  6. ArcGIS Desktop 9.3.1安装流程
  7. component表
  8. 跟着JQuery API学Jquery 之四 css
  9. UVA1587-Box
  10. Seagull License Server 9.4 SR3 2781 完美激活(解决不能打印问题)