美文网首页
java--寻找数组中的重复数

java--寻找数组中的重复数

作者: android_coder | 来源:发表于2023-06-16 16:17 被阅读0次

题目的要求是:空间复杂度为o(1),那么我们就不能考虑用其他的数据结构来实现
1:时间复杂度O(nlogn), 空间复杂度0(1)

 private static int findDuplicate1(int[] nums) {
        if (nums == null || nums.length <= 0) {
            return 0;
        }
        int n = nums.length;
        int left = 1;
        int right = n - 1;
        int value = -3;
        while (left <= right) {
            int count = 0;
            int mid = (right - left) / 2 + left;
            //中位数mid, for循环用来统计小于等于中位数的元素个数
            for (int num: nums) {
                if (num <= mid) {
                    count++;
                }
            }
            //如果个数小于等于中位数说明,这left--mid之间没有重复的元素,继续从mid开始遍历
            if (count <= mid) {
                left = mid + 1;
            } else {//如果个数比中位数大,说明存在重复的元素,从left--mid-1继续遍历
                right = mid -1;
                value = mid;
            }
        }
        return value;
    }

2:如果不考虑空间复杂度那么可以使用hashset或是hashmap来实现,利用key的唯一性来保证

public static int findDuplicate(int[] num) {
       if (num == null || num.length <= 0) {
           return 0;
       }
       HashMap<Integer, Integer> hashMap = new HashMap<>();
       for (int i = 0; i < num.length; i++) {
           if (hashMap.containsKey(num[i])) {
               return num[i];
           } else {
               hashMap.put(num[i], i);
           }
       }
       return 0;
   }

3:如果不考虑实现复杂度的话那么可以考虑双重循环遍历的方式来实现
时间复杂度0(n*n)

 private static int findDuplicate2(int[] nums) {
        if (nums == null || nums.length <= 0) {
            return 0;
        }
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] == nums[j]) {
                    return nums[i];
                }
            }
        }
        return 0;
    }

相关文章

  • leetcode「组合」题目汇总 回溯法

    2020/4/30 39. 组合总和 题意 在无重复数组candidates中寻找和为target的组合。 can...

  • 常用sql语句

    删除重复数据 更新操作数组数据 插入去重更新

  • 《剑指Offer》数组考点题解

    题目链接:数组中的重复数字 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重...

  • Remove Duplicates from Sorted Ar

    有序数组中移除重复数字

  • 寻找重复数 LeetCode287

    寻找重复数 LeetCode287 难点:在于题目限制 :不能更改原数组(假设数组是只读的)。只能使用额外的 O(...

  • 每周 ARTS 第 15 期

    1. Algorithm 287. 寻找重复数(中等) 描述: 给定一个包含 n + 1 个整数的数组 nums,...

  • 好玩的JS数组

    好玩的js数组 数组去重 数组是否相等 两个数组的交集 寻找两个数组的不同 在两个数组中的非共公元素 判断两个数组...

  • lintcode-删除排序数组中的重复数字

    删除排序数组中的重复数字 利用库函数,偷懒法

  • 数组中重复数问题

    题目 解法 知识点 1.“&”、“|”、“^”按位逻辑运算1.1 &是按位逻辑运算符,比如5 & 6,5和6转换为...

  • PHP全栈学习笔记27

    数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的...

网友评论

      本文标题:java--寻找数组中的重复数

      本文链接:https://www.haomeiwen.com/subject/beeokdtx.html