找水王
设计思想:
利用两个不同的数相抵的方式实现,从后往前遍历,只要有与其不同的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; } }
实现截图:
个人总结:首先题目的要求是最优解,需要考虑时间复杂度和空间复杂度,如果单从时间复杂度来考虑的话,最优应为O(n),但需要创建一个数组来储存每个账号出现的次数,如果单从空间复杂度考虑的话,最优为不利用新的空间,但时间复杂度为O(n*n),实际上冒泡排序也是时间复杂度也是O(n*n),但是需要用一个新的空间,所以,综合考虑的话,使用不同相抵的方法,这种方法不利用新的空间,时间复杂度为O(n*n)。