编程题总结

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;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值