算法系列——调整数组顺序使奇数位于偶数前面
来源:互联网 发布:ubuntu ssd 性能优化 编辑:程序博客网 时间:2024/06/06 05:48
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路
提供以下下两种方法
相对位置不发生变化
可以创建两个数组,分别存储原数组中奇数和偶数,然后在复制到原数组当中。
空间复杂度为O(n),时间复杂度为O(n)
相对位置发生变化
双指针法
1. 使指针l 向后遍历,直到指向的整数为偶数;
2. 使指针r 向前遍历,直到指向的整数为奇数;
3. 交换指针l 和指针r 所指向的元素。
4. 在 l 和 r 相遇之前,l继续向后遍历,r继续向前遍历。
空间复杂度为O(1),时间复杂度为O(n),会改变元素的相对位置。
程序实现
相对位置不发生变化
空间复杂度为O(n),时间复杂度为O(n)
public class Solution { public void reOrderArray(int [] array) { int len=array.length; int count1=0; int count2=0; int[] arr1=new int[len]; int[] arr2=new int[len]; for(int i=0;i<len;i++){ if(array[i]%2==0){ arr2[count2++]=array[i]; }else{ arr1[count1++]=array[i]; } } for(int i=0;i<count1;i++){ array[i]=arr1[i]; } for(int i=0;i<count2;i++){ array[count1+i]=arr2[i]; } } }
相对位置发生变化
空间复杂度为O(1),时间复杂度为O(n)
public void reOrderArray(int [] array) { if(array==null||array.length==0) return; int l=0; int r=array.length-1; while(l<r){ while(l<r&&array[l]%2!=0) l++; while(l<r&&array[r]%2==0) r--; if(l<r) swap(array,l,r); } } private void swap(int[]array,int i,int j){ int temp=array[i]; array[i]=array[j]; array[j]=temp; }
阅读全文
0 0
- 算法系列——调整数组顺序使奇数位于偶数前面
- 算法题目---调整数组顺序使奇数位于偶数前面
- 算法题/调整数组顺序使奇数位于偶数前面
- 数据结构——算法之(026)( 调整数组顺序使奇数位于偶数前面)
- 经典算法——调整数组顺序使奇数位于偶数前面
- 每天一道算法题——调整数组顺序使奇数位于偶数前面
- 【数组3】-调整数组顺序使奇数位于偶数前面
- 数组3:调整数组顺序使奇数位于偶数前面
- 重拾算法之剑指Offier——调整数组顺序使奇数位于偶数前面
- 微软,Google面试题 (29) —— 调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 《剑指offer》——调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面——剑指offer
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer——调整数组顺序使奇数位于偶数前面
- 剑指Offer——(13)调整数组顺序使奇数位于偶数前面
- 03.js数据类型之间的转换与运算
- [数据库与SQL]
- Wolf从零学编程-用Python打造简单加密程序(五)
- ARKit初体验
- sqoop1 常用命令及hive导入参数参考
- 算法系列——调整数组顺序使奇数位于偶数前面
- grep 查找
- SQL基础知识
- 51nod1459 迷宫游戏
- Wolf从零学编程-用Python打造简单加密程序(六)
- 【JavaScript 基础】04 函数
- 测距项目
- js控件操作
- String的@Scheduled