找水王

设计思想:

利用两个不同的数相抵的方式实现,从后往前遍历,只要有与其不同的ID便两两抵消,将目前最后面的补到前面的位置,最后留下的便为水王。

代码实现:

package Shi;

public class Shi {

    public static void main(String[] args) {
        int n1[]={1,2,4,5,4,1,2,1,1,1,1,1};
        System.out.println("水王的ID为:"+zhao(n1));
    }

    public static int zhao(int[] a){
        int l=a.length;
        int n=0;
        boolean nn=false;
        for(int i=l-1;i>=0;i=i-2){
            for(int j=i-1;j>=0;j--){
                if(a[i]!=a[j]){
                    if(j!=i-1)
                        a[j]=a[i-1];
                }
                else {
                    nn=true;n=a[i];
                }
            }
            if(nn==true) break;
        }
        n=a[0];
        return n;
    }
}

实现截图:

个人总结:首先题目的要求是最优解,需要考虑时间复杂度和空间复杂度,如果单从时间复杂度来考虑的话,最优应为On),但需要创建一个数组来储存每个账号出现的次数,如果单从空间复杂度考虑的话,最优为不利用新的空间,但时间复杂度为On*n),实际上冒泡排序也是时间复杂度也是On*n),但是需要用一个新的空间,所以,综合考虑的话,使用不同相抵的方法,这种方法不利用新的空间,时间复杂度为On*n)。

原文地址:https://www.cnblogs.com/zhaoziming/p/6725827.html