题目:对任意数组,重新排列使数组的奇数在左边,偶数在右边,要求时间复杂度为O(n)。
例子: {1,2,3,4,5,6,7,8,9,10} -> {1,3,5,7,9,2,4,6,8,10}
思路:类似快速排序的处理,从左边扫描直到找到偶数,再从右边扫描直至找到奇数,再交换。
代码:
package algorithm.ms100;
public class Ex83 {
private int[] a = {1,2,3,4,5,6,7,8,9,10};
public void oddAndEven() {
int i = 0;
int j = a.length-1;
int temp;
while(true) {
while(i<a.length && (a[i]%2 == 0)) {
i++;
}
while(j>= 0 && (a[j]%2 == 1)) {
j--;
}
if( i > j ) break;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
for(i=0; i<a.length; i++) {
System.out.print(a[i] + " ");
}
}
public static void main(String[] args) {
Ex83 ex = new Ex83();
ex.oddAndEven();
}
}
分享到:
相关推荐
c++数据结构顺序表奇数在左偶数在右源码例子c++数据结构顺序表奇数在左偶数在右源码例子
通过 数组排序 取出数组中的奇数和偶数放到新的数组中,并对数组进行大小排列。
如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置, 如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上, 然后再按从大到小的顺序,依次在第一个...
1、求一个无序数组的中位数, (若数组是偶数,则中位数是指中间两个数字之和除以2,若数组是奇数,则中位数是指最中间位置。要求:不能使用排序,时间复杂度尽量低 2、例如: lists = [3, 2, 1, 4] , 中位数为 = ...
使数组中的奇数位于偶数前面15.找链表中倒数第K个节点.16.输出反转后的链表17.合并两个有序链表18.判断二叉树A中是否包含子树B.19.二叉树的镜像20.顺时针打印矩阵、21.包含min函数的栈.22.判断一个栈是否是另一个栈...
要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 4、使用TreeSet和Comparator,写TreeSetTestInner 要求: 对TreeSet中的元素...
设 A[]是由非 0 整数构成的数组,要求设计一个算法重新排列数组 A[]中的数,使得奇数 都排在偶数的前面。要求该算法的时间复杂度为 O(n),空间复杂度为 O(1)。
14. 使数组中的奇数位于偶数前面 15. 找链表中倒数第K个节点 16. 输出反转后的链表 17. 合并两个有序链表 18. 判断二叉树A中是否包含子树B 19. 二叉树的镜像 20. 顺时针打印矩阵 21. 包含min函数的栈 22. ...
B = HMF(A,N) 使用 NxN 框对矩阵 A 执行... 如果 N 是偶数,则 N 增加 1。 2) 需要图像处理工具箱。 3) 如果函数 NANMEDIAN 存在 (Statistics Toolbox),NaN 将被视为缺失值并被忽略。 例子-------- % 原始图像[I,map]
调整数组顺序,使奇数位于偶数前面: 链表中倒数第k个节点: 反转链表: 合并两个排序的链表 树的子结构 二叉树的镜像 顺时针打印矩阵 包含main函数的栈 栈的压入、弹出序列 从上往下打印二叉树 二叉搜索树的后序遍历...
题1 完成函数f的实现,参数a为int数组首地址,len为数组长度,要求函数f能够将数组元素重新排列奇数在前,偶数在后。 答案: void f(int *a, int len) { int i, j; for(i=0; i; i++) { int flg=1; for(j=0; j; j++)...
使用场合:任意数字与1做按位与操作,可以判断奇偶性,结果为1,则为奇数,否则为偶数 0 :0 1 :1 2 :10 3 :11 4 :100 5 :101 5 & 1 101 001 ========== 001 4 & 1 100 001 ==== 000 2、按...
整数组顺序使奇数位于偶数前面 把数组排成最小的数 和为 S 的连续正整数序列 和为 S 的两个数字 N 数之和 三数之和 二维数组 构建乘积数组 顺时针打印矩阵 数据统计 数组中出现次数超过数组长度一半的数字 第一个只...
14调整数组顺序使奇数位于偶数前面 15链表中倒数第k个结点 16反转链表 17合并两个排序的链表 18树的子结构 19二叉树的镜像 20顺时针打印矩阵 21包含min函数的栈 22栈的压入弹出序列 23从上往下打印二叉树 24二叉搜索...
注:考虑偶数或奇数时怎么交换 2.6 输入十个数,去掉最大数和最小数后求平均值 2.7输入六个数到数列中,再输入一数值,如果与该数相同数组的元素相同时,则输出其下标,否则,输出“-1” 2.8降序排列十个数 2.9 求一...
Interviews(剑指offer Java代码)二维数组中的查找替换空格从尾到头打印链表重建二叉树用两个栈实现队列旋转数组的最小数字斐波那契数列跳台阶变态跳台阶矩形覆盖二进制中1的个数数值的整数次方调整数组顺序使奇数...
1.6.3. 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数 位于数组的后半部分 ...........................................................130 1.6.4. 给定链表的头指针和一个...
然后将小于mid的数放在数组的偶数位置(0,2,4……),将大于mid的数放在数组的奇数位置(1,3,5……) 有序矩阵中第K小的元素(自己做的,有待优化) 题目: 给定一个 n x n 矩阵,其中每行和每列元素均按升序...
13、调整数组顺序使奇数位于偶数前面 14、链表倒数第k个节点 15、反转链表 16、合并两个排序列表 17、树的子结构 18、二叉树的镜像 19、顺时针打印矩阵 20、包含min函数的栈 21、栈的压入、弹出序列 22、从上到下...
这篇文章主要介绍了基于Python实现扑克牌面试题,文中通过示例代码介绍的非常详细...2、分n为奇数或偶数2种情况,用for循环逆推出原牌组的的顺序值(顺序为小数在下,大数在上) 3、对新数组用顺序值进行逆向排序后,输