zoukankan      html  css  js  c++  java
  • 645. 错误的集合『简单』

    题目来源于力扣(LeetCode

    一、题目

    645. 错误的集合

    题目相关标签:哈希表、数学

    提示:

    • 给定数组的长度范围是 [2, 10000]。
    • 给定的数组是无序的。

    二、解题思路

    1. 数组形式创建哈希映射,记录 nums 数组元素各出现的次数

    2. 遍历哈希数组,出现次数大于 1 的元素即重复的元素

    3. 出现次数等于 0 的元素即遗漏的元素

    注意点:

    • 按题目要求:重复的元素在结果数组的索引 0 上,遗漏的元素在结果数组的索引 1 上

    • nums 数组中可能没有出现遗漏的元素(即出现次数等于 0 的元素),那么遗漏的元素就是最大的元素加 1,在代码中我们采用 bucket 数组长度加 1 的方式来简单地处理该情形

    三、代码实现

    public static int[] findErrorNums(int[] nums) {
        // 创建长度为 2 的数组,第一位用来存储重复的元素,第二位用来存储遗漏的元素
        int[] result = new int[2];
        // bucket 数组长度为 nums 数组长度加 1
        // 以防 {1, 1} 时,遗漏数字 2 不存在于数组中
        int[] bucket = new int[nums.length + 1];
        // 创建哈希映射
        for (int i : nums) {
            bucket[i] ++;
        }
        // 遍历 bucket 数组,找到重复项与遗漏项
        for (int i = 1; i < bucket.length; i++) {
            if (bucket[i] > 1) {
                // 重复的数字所在索引为 0
                result[0] = i;
            } else if (bucket[i] == 0) {
                // 遗漏的数字所在索引为 1
                result[1] = i;
            }
            // 提前结束循环
            if (result[0] > 0 && result[1] > 0) {
                return result;
            }
        }
        return result;
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
    //    int[] nums = {1, 2, 2, 4};  // output:{2, 3}
    //    int[] nums = {1, 1};  // output:{1, 2}
        int[] nums = {2, 2};  // output:{2, 1}
        int[] result = findErrorNums(nums);
        System.out.println(Arrays.toString(result));
    }
    
  • 相关阅读:
    简单SSM配置详解
    Nginx 简介
    序列化与反序列化
    用HttpSessionListener与HttpSessionBindingListener实现在线人数统计
    Linux
    jsp标签精华(持续更新中)
    ZooKeeper 编程(一)
    maven环境快速搭建
    Web项目--------原Oracle数据库的项目同时兼容MySql
    JavaMail实现邮箱之间发送邮件功能
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12897270.html
Copyright © 2011-2022 走看看