重排数组元素,奇数放在奇数位,偶数放在偶数位
2014-07-13 14:23
288 查看
给定一个长度位2N的数组,奇数和偶数个数相同,实现一个算法,使得奇数放在奇数位,偶数放在偶数位。
思路,两指针从头到尾扫描,遇见奇数放在偶数位,和偶数放在奇数位就停下,交换内容。时间复杂度O(n),空间复杂度O(1).
思路,两指针从头到尾扫描,遇见奇数放在偶数位,和偶数放在奇数位就停下,交换内容。时间复杂度O(n),空间复杂度O(1).
#include <iostream> using namespace std; class solution{ public: void swap(int *a, int *b){ int c = *a; *a = *b; *b = c; } void arrange(int *arr, int size){ int i = 0, j = 1; while (true){ while (arr[i] & 1) i += 2; while ((arr[j] & 1) == 0) j += 2; swap(&arr[i], &arr[j]); i += 2; j += 2; if (i >= size || j >= size) break; } } }; int main(int argc, const char * argv[]) { solution sl; int arr[] { 2, 1, 6, 4, 3, 5, 8, 9, 7, 10 }; sl.arrange(arr, 10); for (int i = 0; i < 10; i++){ cout << arr[i] << ","; } system("pause"); return 0; }
相关文章推荐
- 【算法18】重排数组元素使得所有的奇数位于所有偶数之前
- 重排数组元素使得所有的奇数位于所有偶数之前
- java数组中,然后把奇数放在数组的左边,偶数放在右边,方法二
- 将一个数组中奇数放在数组前边,偶数放在数组后边
- 将S所指的字符串中下标为偶数同时ASCⅡ值为奇数的字符删除,所指串中剩余的字符形成新的串放在t所指的数组中
- 假设一个数组A[n]数据均为整形,设计一个O(n)的算法,实现将所有奇数放在数组左侧,所有偶数放在右侧
- 如何将数组中奇数放在偶数前面。
- 调整数组元素顺序,奇数在前,偶数在后
- 剑指offer 面试题14 数组元素奇数调整到偶数之前
- 奇数位上都是奇数偶数位上都是偶数
- 将数组的一组数据中的奇数放在前半部分,偶数放在后半部分
- 剑指offer 面试题14 把数组所有偶数放在奇数后面
- 2n 长度数组,n个奇数,n个偶数,把奇数放在奇数位,偶数放在偶数位
- 偶数位上都是偶数,要么所有的奇数位上都是奇数
- 将数组奇数放在偶数前面,并保持相对位置不变
- 重排数组使得数组左边为奇数,右边为偶数
- 课堂提问(C语言):输入10个整数到一个数组,将奇数放在数组前面,偶数放在数组后面,然后输出整个数组。
- 调整数组元素的顺序使得奇数在前偶数在后并且各自有序
- 实现可重用性即可扩展性 针对剑指offer 面试题14 把数组所有偶数放在奇数后面
- 数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析