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;
          }
      }
    }
  • 相关阅读:
    转载:ORA-01438: 值大于为此列指定的允许精度
    PLSQL碰到pls-00103的错误解决办法
    spring 的xml配置使用p标签简化
    spring aop实现拦截接口请求打印日志
    response 设置头的类型 (转)
    js或者ext js获取返回值
    ext grid 前台grid加载数据碰到数据重复只显示一条
    关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多
    SVN提交碰到的问题奇怪的问题
    关于项目使用可配置的properties 文件的实现
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3777242.html
Copyright © 2011-2022 走看看