题解 | #数组中出现次数超过一半的数字#

数组中出现次数超过一半的数字

http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

就问有没有更拉胯的代码解法,挑战下限,1%+1%

import java.util.HashSet;
import java.util.ArrayList;
public class Solution {
  public int MoreThanHalfNum_Solution(int [] array) {
        //先遍历一遍得到数字种类,用set做判定
        HashSet type_set=new HashSet();
        ArrayList type=new ArrayList();
        for(Integer x:array){
            if(type_set.add(x)){
                type.add(x);
            }
        }
        //再开一个与种类等长的数组,索引匹配,记录出现次数
        ArrayList num=new ArrayList();
        for (int i = 0; i <type.size() ; i++) {
            num.add(0);
        }
        //再遍历一次种类数组,得到次数数组
        for (int i = 0; i <type.size(); i++) {
            for (int j = 0; j < array.length; j++) {
                if(array[j]==type.get(i)){
                    num.set(i,num.get(i)+1);
                }
            }
        }
        //遍历次数数组,取出最大次数对应索引
        int max=0;
        int type_index = 0;
        int most_type = 0;
        for (int i = 0; i <num.size() ; i++) {
            if(num.get(i)>=max){
                max=num.get(i);
                type_index=i;
            }
        }
        //判定次数是否大于原数组长度一半,大则返回该索引对应的种类
        if (max>array.length/2){
            most_type=type.get(type_index);
        }
        return most_type;
    }
}
全部评论

相关推荐

昨天 22:24
已编辑
西安工业大学 C++
点赞 评论 收藏
分享
04-18 00:32
已编辑
中南大学 Java
点赞 评论 收藏
分享
用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务