java算法题42501

题目

算法题:
(1)给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
输入:nums = [1,2,3,1]
输出:true

解法1,使用HashSet

使用HashSet来存储数组中的元素,同时遍历数组。如果遍历过程中发现某个元素已经在HashSet中存在,那么就返回true,表示至少有一个值出现了至少两次。如果遍历结束后都没有发现重复的元素,则返回false

import java.util.HashSet;  
import java.util.Set;  
  
public class Solution {  
    public static boolean containsDuplicate(int[] nums) {  
        Set<Integer> set = new HashSet<>();  
        for (int num : nums) {  
            if (set.contains(num)) {  
                return true; // 发现重复元素,返回true  
            }  
            set.add(num); // 将元素添加到集合中  
        }  
        return false; // 遍历结束,没有发现重复元素,返回false  
    }  
  
    public static void main(String[] args) {  
        int[] nums = {1, 2, 3, 1};  
        boolean result = containsDuplicate(nums);  
        System.out.println(result); // 输出应为true  
    }  
}

解法2 使用HashMap

使用HashMap同样可以实现检查数组中是否存在重复元素的功能。HashMap在Java中通常用于存储键值对,其中键是唯一的。在这个问题中,我们可以将数组中的元素作为键存储到HashMap中。如果在添加元素时发现键已经存在,则说明数组中有重复元素

import java.util.HashMap;  
import java.util.Map;  
  
public class Solution {  
    public static boolean containsDuplicate(int[] nums) {  
        Map<Integer, Boolean> map = new HashMap<>();  
        for (int num : nums) {  
            if (map.containsKey(num)) {  
                return true; // 发现重复元素,返回true  
            }  
            map.put(num, true); // 将元素作为键添加到HashMap中  
        }  
        return false; // 遍历结束,没有发现重复元素,返回false  
    }  
  
    public static void main(String[] args) {  
        int[] nums = {1, 2, 3, 1};  
        boolean result = containsDuplicate(nums);  
        System.out.println(result); // 输出应为true  
    }  
}

总结

使用HashSetHashMap的解法时间复杂度都是O(n),其中n是数组的长度。这是因为这两种数据结构都提供了常数时间复杂度的插入和查找操作。

当你遍历数组中的每个元素时,对于每个元素,你都在做以下操作之一:

  1. 检查元素是否已经在HashSetHashMap中(O(1)时间复杂度)。
  2. 如果不在,将其添加到HashSet或作为键添加到HashMap中(O(1)时间复杂度,在平均情况下)。

因此,整体的时间复杂度是O(n),因为你只遍历了数组一次,并且对于数组中的每个元素都执行了常数时间的操作。

在Java中,无论是使用HashSet还是HashMap,你都可以得到一个时间复杂度为O(n)的解法。这两种数据结构在内部都是通过哈希表实现的,它们的主要区别在于HashMap存储键值对,而HashSet只存储键。在这个特定的问题中,我们只需要关心键(即数组中的元素)是否存在,所以使用HashSet可能会更直观一些,因为它专注于存储唯一键的集合。然而,使用HashMap同样可以达到相同的效果,并且时间复杂度也是O(n)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkPet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值