zoukankan      html  css  js  c++  java
  • 29 输出超过一半的数

    //输出超过一半的数,如果没有则输出-1。通过编译,bymyself
    import java.util.*;
    public class MoreThanHalf{
        public static void main(String args[]){
            int array[]={3,4,5,3,2,3};
            System.out.println(moreThanHalf(array));
        }
        public static int moreThanHalf(int[] array){
            Arrays.sort(array);
            Set sets = new TreeSet();
            List lists = new ArrayList();
            for(int i=0; i<array.length; i++){
                sets.add(String.valueOf(array[i]));//String.valueOf!!!
                lists.add(String.valueOf(array[i]));
            }
            //转为字符串,才能使用indexOf
            StringBuffer sb = new StringBuffer();
            Iterator it = lists.iterator();
            while(it.hasNext()){
                String s = (String)it.next();
                sb.append(s);        
            }
            String ss=sb.toString();
            //
            it = sets.iterator();
            while(it.hasNext()){
                String s = (String)it.next();
                int start = ss.indexOf(s);
                int end = ss.lastIndexOf(s);
                if(end-start+1>array.length/2){
                    return Integer.parseInt(s);
                }
            }
            return -1;
        }
    }
    
        
    //输出超过一半的数,如果没有则输出-1。通过测试
    import java.util.*;
    public class MoreThanHalf1{
        public static void main(String args[]){
            int array[]={3,4,5,3,2,3};
            System.out.println(moreThanHalf(array));
        }
        public static int moreThanHalf(int[] array){
            if(array.length==1){//当数组中只有一个数时,要输出该数
                return array[0];
            }
            Arrays.sort(array);
            int count = 1;
            for(int i=0; i<array.length-1; i++){
                if(array[i]==array[i+1]){
                    count++;
                    if(count>array.length/2){//不是else if
                    return array[i];
                    }
                }else{
                    count = 1;
                }
            }
            return -1;
        }
    }
    
        
    //输出超过一半的数,如果没有则输出-1。通过编译.O(n)
    public class MoreThanHalf2{
        public static void main(String args[]){
            int array[]={3,4,5,3,3};
            System.out.println(moreThanHalf(array));
        }
        public static int moreThanHalf(int[] array){
            if(array==null || array.length<=0){//null必须小写
                return 0;
            }
            int middle = array.length>>1;
            int start = 0;
            int end = array.length-1;
            int index = partition(array,start,end);
            while(index!=middle){
                if(index>middle){
                    end = index-1;
                    index = partition(array,start,end);
                }else{
                    start = index+1;
                    index = partition(array,start,end);
                }
            }
            int result = array[middle];
            int times = 0;
            for(int i=0; i<array.length; i++){
                if(array[i]==result){
                    times++;
                }
            }
            if(times*2<=array.length){
                return 0;
            }
            return result;
        }
        
        public static int partition(int data[],int low,int high){
            int k = data[low];
            while(low<high){
                while(low<high&&data[high]>=k){
                    high--;
                }
                if(low<high){
                    data[low++]=data[high];
                }
                while(low<high&&data[low]<=k){
                    low++;
                }
                if(low<high){
                    data[high--]=data[low];
                }
            }
            data[low]=k;
            return low;    
        }
    }
    
        

     推荐算法:

    //输出超过一半的数,如果没有则输出-1。通过测试O(N)
    import java.util.*;
    public class test29{
      public static void main(String args[]){
          int array[]={3};
          System.out.println(moreThanHalf(array));
      }
      public static int moreThanHalf(int[] array){
          int result = -1;
          int times = 0;
          for(int i=0;i<array.length;i++){
              if(times==0){
                  result = array[i];
                  times=1;
              }else if(result==array[i]){
                  times++;
              }else{
                  times--;
              }
          }
          //判断result是否超过一半
          times=0;
          for(int i=0;i<array.length;i++){
              if(array[i]==result){
                  times++;
              }
          }
          if(times>array.length>>1){
              return result;
          }else{
              return -1;
          }
      }
    }
  • 相关阅读:
    Python lambda函数
    python 获取日期
    <base>元素
    django--开发博客
    django修改时区,数据库
    django初探
    python创建虚拟环境
    资源记录页面
    组管理
    远程管理命令
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3777242.html
Copyright © 2011-2022 走看看