【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面
来源:互联网 发布:java实现扫码支付 编辑:程序博客网 时间:2024/05/20 01:44
完整代码地址
完整代码地址
题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
在代码注释里面
代码
/** * 题目: * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序, * 使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分, * 并保证奇数和奇数,偶数和偶数之间的相对位置不变。 * * 思路: * 感觉这道题并没有比较完美的解法,要么时间复杂度高,要么空间复杂度高 * 解法1: * 遍历数组,将所有奇数前移,将所有偶数保存在队列里,并统计奇数个数 * 将队列里的偶数再放到数组中 * 时间复杂度O(n),空间复杂度O(n) * 解法2: * 用i表示第一个偶数的下标,j表示i后面第一个奇数的下标(i,j初始化都为-1) * 当找到符合的i,j时,将下标为[i,j)的值向后移一位(这个范围内都是偶数), * 将原本下标为i的偶数替换为原本下标为j的奇数 * 最坏时间复杂度为O(n),空间复杂度为O(1) * * @author peige */public class _21_ReorderArray { /** * 使用解法1 */ public static void reOrderArray(int[] array) { if(array == null || array.length == 0) return; LinkedList<Integer> list = new LinkedList<>(); int index = 0; for(int val : array) { // 奇数 if((val & 1) == 1) { array[index++] = val; } else { list.add(val); } } while(index != array.length) { array[index++] = list.removeFirst(); } }}
测试
public static void main(String[] args) { test1(); test2(); test3();}/** * 功能测试 */private static void test1() { int[] array1 = {1,2,3,4,5}; _21_ReorderArray.reOrderArray(array1); printArray(array1); int[] array2 = {1,2,1,4,5,6,3}; _21_ReorderArray.reOrderArray(array2); printArray(array2);}/** * 边界测试 * 1.全是偶数 * 2.全是奇数 * 3.只有一个元素 */private static void test2() { int[] array1 = {2,2,2,2}; _21_ReorderArray.reOrderArray(array1); printArray(array1); int[] array2 = {3,3,3,3,3}; _21_ReorderArray.reOrderArray(array2); printArray(array2); int[] array3 = {1}; _21_ReorderArray.reOrderArray(array3); printArray(array3);}/** * 极端测试 */private static void test3() { int[] array1 = null; _21_ReorderArray.reOrderArray(array1); printArray(array1); int[] array2 = new int[0]; _21_ReorderArray.reOrderArray(array2); printArray(array2);}private static void printArray(int[] array) { System.out.println(Arrays.toString(array));}
阅读全文
0 0
- 剑指Offer(第二版)面试题21:调整数组顺序使奇数位于偶数前面
- 剑指offer--面试题21:调整数组顺序使奇数位于偶数前面
- 【剑指offer】面试题 21:调整数组顺序使奇数位于偶数前面
- 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面
- 剑指Offer 面试题21:调整数组顺序使奇数位于偶数前面 Java代码实现
- [剑指offer][面试题14]调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14 调整数组顺序使奇数位于偶数前面
- 《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14—调整数组顺序使奇数位于偶数前面
- 《剑指Offer》学习笔记--面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现
- 【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】
- 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14-调整数组顺序使奇数位于偶数前面
- 剑指offer-面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面
- 剑指offer之面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer之面试题14调整数组顺序使奇数位于偶数前面
- Nexus3搭建Maven私有库(三)
- MFC在窗体上画线
- React Native Mac 环境搭建
- WaterGems第一讲:水力模拟计算
- html基础
- 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面
- android studio 常量表达式错误
- 最新虚拟币交易平台源码 带手机版+APP 山寨币交易平台包安装包对接区块链ICO众筹源码
- 2822: [AHOI2012]树屋阶梯
- Android高新面试题2017汇总
- 苹果机器学习博客姗姗来迟:使用改进的生成对抗模型,提高图像真实性,降低图像的标记成本
- freemarker
- python中的常见的列表操作及注意事项
- 【剑指offer】面试题22:链表中的倒数第k个节点