1.读题后,理解题,只要数组中有偶数是就一定在奇数前。
那么,在解决交换类问题,我们可以用到双指针,只用遍历一边即可,
在数组是一段连续的空间,存储数据。通过下标访问
刚说到通过双指针去解决问题,那么我们来看看怎么解决。
首先定义两个指针 一个 左 L = 0 ; 右 R = 数组长度减一;
根基题意来看,是将偶是的数排在前面,将奇数排在后面。
那么我们通过判奇 偶 数,在将数的位置进行排列。
我们来分析一下,交换的条件。
1. L 为 奇数 R 为 奇数 将 R-- 向后走 在进行判断
2.L为奇数 R为偶数 将 L 和 R 交换 然后 在 L ++ R --
3.L为偶数 R 为偶数 将L ++ 在进行判断
4.L为偶数 R为奇数 L ++ R -- 在从新进行判断
依次类推:看看代码如何编写?
public int[] sortArrayByParity(int[] A) {
if(A==null||A.length==1||A.length==0){
return A;
}
int L=0;
int R=A.length-1;
while(L<R){
if(A[L]%2==0&&A[R]%2==1){
L++;
R--;
}else if(A[L]%2==0&&A[R]%2==0){
L++;
}else if(A[L]%2==1&&A[R]%2==1){
R--;
}else{
int temp=A[L];
A[L]=A[R];
A[R]=temp;
}
}
return A;
}
二、
用消除的思想,比如 消除到最后的数为众数 ,那么 定义 记录 数 据 的 变量 , 如果 将 第一个数于第二个数 去比较,如果相同 ,计数变量加 一 , 如果不同 就减 一 如果减到0 就记录新给数 从0 开始记录这个数
假设从数字1开始,(如果假设在数组中,需要按数组的顺序),进行比较如果相同 容器计数就会 加,如果比较不同,那么容器计数就会减少 把容积中原来的数消减掉 ,直到减为0在重新,在吧新的数重新计数。
int num=nums[0];
int count=1;
for(int i=1;i<nums.length;i++){
if(nums[i]==num){
count++;
}else{
count--;
if(count==0){
num=nums[i];
count=1;
}
}
}
return num;
}