zoukankan      html  css  js  c++  java
  • Lc448_找到所有数组中消失的数字

    package com.example.demo;
    
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * 448. 找到所有数组中消失的数字
     * 给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
     * <p>
     * 找到所有在 [1, n] 范围之间没有出现在数组中的数字。
     * <p>
     * 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
     * <p>
     * 示例:
     * <p>
     * 输入:
     * [4,3,2,7,8,2,3,1]
     * <p>
     * 输出:
     * [5,6]
     */
    public class Lc448 {
    
    
        /**
         * 通过hash的key value 确定缺失的数字
         * @param nums
         * @return
         */
        public static List<Integer> findDisappearedNumbers(int[] nums) {
    
            // Hash table for keeping track of the numbers in the array
            // Note that we can also use a set here since we are not
            // really concerned with the frequency of numbers.
            HashMap<Integer, Boolean> hashTable = new HashMap<Integer, Boolean>();
    
            // Add each of the numbers to the hash table
            for (int i = 0; i < nums.length; i++) {
                hashTable.put(nums[i], true);
            }
    
            // Response array that would contain the missing numbers
            List<Integer> result = new LinkedList<Integer>();
    
            // Iterate over the numbers from 1 to N and add all those
            // that don't appear in the hash table.
            for (int i = 1; i <= nums.length; i++) {
                if (!hashTable.containsKey(i)) {
                    result.add(i);
                }
            }
    
            return result;
        }
    
    
        public static void main(String[] args) {
            int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};
            findDisappearedNumbers(nums).forEach(n -> {
                System.out.println(n);
            });
            System.out.println();
        }
    }
    
    
  • 相关阅读:
    【Lua】Lua脚本及在Redis中的使用
    【php】php实现数组分块
    【git】git常用命令
    【PHP】php分隔字符串为数组
    【MYSQL】Mysql常用语句及命令
    键盘删除键长按只能删除一个字符,因为开启了键盘筛选键功能,解决方法
    JAVA基础知识总结:五
    linux常见命令
    JAVA基础知识总结:六
    写一个类时什么时候需要重写toString
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/12978597.html
Copyright © 2011-2022 走看看