LeetCode210515卡牌数组和按奇偶数组排序2
Posted 程序彤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode210515卡牌数组和按奇偶数组排序2相关的知识,希望对你有一定的参考价值。
卡牌数组
思路:
声明一个计数数组,可统计出重复数的个数,索引下标即为当前数是几,存放出现重复的总次数。
将数组中出现的每个数的总次数放到list集合中。
// 当前长度对从2开始的数取模,如果是0,即8%2=0 8%3 8%4=0 8%5 8%6 8%7 8%8=0取模为0(2/4/8)的就是8的公约数。
当是公约数时,先默认为true,如果找到当前数不能整除从2开始的j,代表集合里有重复次数不同的数,直接返回false。
public static boolean hasGroupsSizeX(int[] arr) {
int n = arr.length;
int[] count = new int[10000]; // 计数数组,可统计出重复数的个数,索引下标即为当前数是几,存放出现重复的总次数。
for (int c: arr) {
count[c]++;
}
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10000; ++i) {
if (count[i] > 0) {
list.add(count[i]); // 将数组中出现的每个数的总次数放到list集合中
}
}
for (int j = 2; j <= n; ++j) {
if (n % j == 0) { // 当前长度对从2开始的数取模,如果是0,即8%2=0 8%3 8%4=0 8%5 8%6 8%7 8%8=0取模为0(2/4/8)的就是8的公约数
boolean flag = true;
for (int num: list) {
if (num % j != 0) {
flag = false;
break;
}
}
if (flag) {
return true;
}
}
}
return false;
}
按奇偶数组排序2
法1:原地修改;维护偶数位置的i索引和奇数位置的j索引,j从1开始,i从0开始,如果a[i]对2取模为1,偶数索引上成奇数时,则判断奇数索引所指值是否是偶数,如果是奇数则步长为2走两步继续找偶数,否则,也就是找到了在奇数位置找到了偶数,就交换当前两指针所指值。
法2:两次遍历;复制出一个长度等同的新数组,遍历两次数组中的所有数,第一次找到所有偶数存放到下标为偶数的新数组中。第二次到所有奇数存放到下标为奇数的新数组中。
public static int[] method(int[] a){
int j =1;
int n = a.length;
for (int i = 0; i < n; i+=2) {
if (a[i] % 2 == 1) {
while (a[j] % 2 == 1) {
j+=2;
}
swap(i,j,a);
}
}
return a;
}
private static void swap(int i, int j, int[] a) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static int[] method2(int[] a){
int n = a.length;
int[] copyArr = new int[n];
int i = 0;
for (int num : a) {
if (num % 2 == 0) {
copyArr[i] = num;
i+=2;
}
}
int j = 1;
for (int num : a) {
if (num % 2 == 1) {
copyArr[j] = num;
j+=2;
}
}
return copyArr;
}
以上是关于LeetCode210515卡牌数组和按奇偶数组排序2的主要内容,如果未能解决你的问题,请参考以下文章