• LeetCode No442. 数组中重复的数据


    题目

    给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。

    你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。

    示例 1:

    输入:nums = [4,3,2,7,8,2,3,1]
    输出:[2,3]

    示例 2:

    输入:nums = [1,1,2]
    输出:[1]

    示例 3:

    输入:nums = [1]
    输出:[]

    提示:

    n == nums.length
    1 <= n <= 10^5
    1 <= nums[i] <= n
    nums 中的每个元素出现 一次 或 两次

    思路

    模拟哈希,对于相同值通过一样的哈希算法计算出来的位置一定是一样的,这样就可以找出重复的数。

    AC代码

    点击查看代码
    class Solution {
        public List<Integer> findDuplicates(int[] nums) {
            List<Integer> res = new ArrayList<>();
            int n = nums.length;
            for(int i=0; i<n; i++) {
                int num = Math.abs(nums[i]);
                if( nums[num-1]>0 ) {
                    nums[num-1] = -nums[num-1];
                } else {
                    res.add(num);
                }
            }
            return res;
        }
    }
    
  • 相关阅读:
    数据库
    流式布局
    ScrollView简单用法
    ADB被占用解决办法
    安卓中shape中的属性大全
    sql语句replace into的用法
    debug
    大数据量数据库优化
    Gson解析后的数据存到本地数据库 耗时的问题
    数据同步异步加载handler Looper
  • 原文地址:https://www.cnblogs.com/Asimple/p/16245361.html
Copyright © 2020-2023  润新知