把奇/偶数(或某种特征的数)都放在数组左边问题
2017-08-20 17:19
120 查看
点:按某种维度去聚集问题,典型的数组按相遇问题搞
题意:如数组[1,5,3,2,4,7,8,66,34,21,23,56,99],希望把全部的奇数集中在数组左边,偶数放右边,如[1,3,5,7,9,2,4,6,8,0]这样
剑指offer面试题14
思路:按某种维度去聚集问题,典型的数组按相遇问题搞。两个指针一个在头一个在尾,一个向前一个向后,不断一方把本方不符的和对方不符的进行交换,注意一方不符对方符合时要移动对方指针直到发现对方也不符为止。
代码:
#include <iostream>
#include <random>
int main () {
int data[20];
std::random_device rd;
for (int i = 0; i < 20; i++) {
int cur = rd() % 100;
std::cout << cur << "\t";
data[i] = cur;
}
std::cout << std::endl;
for (int i = 0, j = 19; i < j;) {
int l = data[i], r = data[j];
if (l % 2 == 1 && r % 2 == 0) {
i++;
j--;
} else if (l % 2 == 1 && r % 2 == 1) {
i++;
} else if (l % 2 == 0 && r % 2 == 0) {
j--;
} else {
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
i++;
j--;
}
}
for (int i = 0; i < 20; i++) {
std::cout << data[i] << "\t";
}
std::cout << std::endl;
return 0;
}
题意:如数组[1,5,3,2,4,7,8,66,34,21,23,56,99],希望把全部的奇数集中在数组左边,偶数放右边,如[1,3,5,7,9,2,4,6,8,0]这样
剑指offer面试题14
思路:按某种维度去聚集问题,典型的数组按相遇问题搞。两个指针一个在头一个在尾,一个向前一个向后,不断一方把本方不符的和对方不符的进行交换,注意一方不符对方符合时要移动对方指针直到发现对方也不符为止。
代码:
#include <iostream>
#include <random>
int main () {
int data[20];
std::random_device rd;
for (int i = 0; i < 20; i++) {
int cur = rd() % 100;
std::cout << cur << "\t";
data[i] = cur;
}
std::cout << std::endl;
for (int i = 0, j = 19; i < j;) {
int l = data[i], r = data[j];
if (l % 2 == 1 && r % 2 == 0) {
i++;
j--;
} else if (l % 2 == 1 && r % 2 == 1) {
i++;
} else if (l % 2 == 0 && r % 2 == 0) {
j--;
} else {
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
i++;
j--;
}
}
for (int i = 0; i < 20; i++) {
std::cout << data[i] << "\t";
}
std::cout << std::endl;
return 0;
}
相关文章推荐
- 给定一个无序数组,请调整该数组,调整成奇数放在数组的左边,偶数放在数组的右边。但是奇数与奇数之间的相对顺序不变,偶数和偶数之间的相对顺序也不变。
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- java数组中,然后把奇数放在数组的左边,偶数放在右边,方法二
- java数组中,然后把奇数放在数组的左边,偶数放在右边,方法一
- 这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。
- 把一个数组划分成左边奇数右边偶数
- 编程: 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
- 冒泡排序的方式实现一组数据偶数放在左边奇数放在右边
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)。
- 将整型数组划分为左右两部分,使左边全为奇数,右边全为偶数.
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 给定一个整数数组,重新排列数组使其左边奇数,右边偶数
- 划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
- JAVA实现调整数组顺序使奇数位于偶数前面问题(《剑指 offer》)
- 调整数组顺序使奇数位于偶数前面及运用解耦方法解决扩展问题
- 数组重排序(将所有奇数都放在前面,所有偶数放在后面)的深入分析
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
- 100.字符串中奇数位置字符和ASCII为偶数的字符放在字符数组t中