0
点赞
收藏
分享

微信扫一扫

【LeetCode】数组中数字出现的次数&&不数组中出现次数超过一半的数字&&构建乘积数组

小贴贴纸happy 2022-03-11 阅读 104

51.数组中数字出现的次数 II

题目:

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

题解:

  • 遍历出现的次数存入map,遍历map取出key值。
    public int singleNumber(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer, Integer> entry = iterator.next();
            if (entry.getValue() == 1)
                return entry.getKey();
        }
        return 0;
    }
  • 推荐使用foreach遍历map。
 for (Map.Entry<Integer, Integer> entry : map.entrySet()){
            if (entry.getValue() == 1)
                return entry.getKey();
        }

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

题目:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

题解:

  • 遍历出现的次数存入map,遍历map取出key值。
public int majorityElement(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        for (Map.Entry<Integer, Integer> entry :map.entrySet()){
            if (entry.getValue() > nums.length/2){
                return entry.getKey();
            }
        }
        return 0;
    }

53.构建乘积数组

题目:

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。

题解:

image-20220303120100255
  • 先计算左下角的累乘结果,存入res数组中;
  • 再计算右上角的累乘,与此前res数组中的对应元素相乘,返回最后的结果。
    public int[] constructArr(int[] a) {
        int length = a.length, temp = 1;
        if (length == 0) return new int[0];
        int[] res = new int[length];
        res[0] = 1;
        for (int i = 1; i < length; i++)
            res[i] = res[i - 1] * a[i - 1];
        for (int j = length - 2; j >= 0; j--){
            temp *= a[j + 1];
            res[j] *= temp;
        }
        return res;
    }
举报

相关推荐

0 条评论