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

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

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

  • 第一种方法,数组排序+各元素计数
  • 第二种方法:HashMap统计次数
import java.util.*;
public class Solution {
    // 1.第一种方法,数组排序+各元素计数
    public int MoreThanHalfNum_Solution(int [] array) {
        if (array.length <= 1) {
            return array[array.length - 1];
        }
        // 先进行排序
        Arrays.sort(array);
        int count = 0;
        int half = array.length / 2;
        // 遍历这个有序数组
        for (int i = 0; i < array.length; i++) {
            if (i == 0) { // 第一个元素count置为1
                count++;
            } else {
                // 当前元素与前一个元素相同,则count++
                if (array[i] == array[i - 1]) {
                    count++;
                    // 当前这个元素个数超过了半数,则return这个元素
                    if (count > half) {
                        return array[i];
                    }
                } else {
                    // 如果当前元素与前一个元素不同,则count置为1重新来计数
                    count = 1;
                }
            }

        }
        return -1;
    }

    /*
    // 2.第二种方法:HashMap统计次数
    public int MoreThanHalfNum_Solution(int [] array) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < array.length; i++) {
            map.put(array[i], map.getOrDefault(array[i], 0) + 1);
        }
        for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if(entry.getValue() > (array.length / 2)) {
                return entry.getKey();
            }
        }
        return -1;
    }
    */
}
全部评论

相关推荐

挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务