鱼C论坛

 找回密码
 立即注册
查看: 1105|回复: 5

存在重复元素

[复制链接]
发表于 2023-12-17 14:21:17 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

代码:
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
    for (int i = 0; i < numsSize; i++)
    {
        for (int j = i + 1; j < numsSize; j++)
        {
            if (nums[i] == nums[j] && abs(i - j) <= k)
            {
                return true;
            }
        }
    }
   
    return false;
}
请问我的代码有哪些问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-17 14:21:31 | 显示全部楼层
可以使用哈希表来解决这个问题。

我们可以遍历数组 nums,并将每个元素及其索引存储在哈希表中。对于每个元素 num[i],我们在哈希表中查找是否存在另一个索引 j,满足 nums[i] == nums[j] 且 abs(i - j) <= k。

如果找到了满足条件的索引 j,则返回 True。如果遍历完整个数组后都没有找到满足条件的索引 j,则返回 False。

下面是代码实现:
def containsNearbyDuplicate(nums, k):    num_dict = {}  # 创建一个空的哈希表    for i in range(len(nums)):        if nums[i] in num_dict and abs(i - num_dict[nums[i]]) <= k:            return True  # 找到满足条件的索引 j        num_dict[nums[i]] = i  # 将当前元素及其索引存储在哈希表中    return False  # 遍历完整个数组后都没有找到满足条件的索引 j# 测试nums = [1, 2, 3, 1]k = 3print(containsNearbyDuplicate(nums, k))  # 输出 Truenums = [1, 0, 1, 1]k = 1print(containsNearbyDuplicate(nums, k))  # 输出 Truenums = [1, 2, 3, 1, 2, 3]k = 2print(containsNearbyDuplicate(nums, k))  # 输出 False
希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-17 15:05:09 From FishC Mobile | 显示全部楼层
FishC 发表于 2023-12-17 14:21
可以使用哈希表来解决这个问题。

我们可以遍历数组 nums,并将每个元素及其索引存储在哈希表中。对于每个 ...

ai退化了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-17 15:05:28 | 显示全部楼层

非常抱歉给您带来困惑,我会尽快修正。

我们来解决一个存在重复元素的问题。假设给定一个整数列表 nums,我们需要判断其中是否存在重复的元素。

一种简单的方法是使用集合(Set)数据结构。集合中的元素不允许重复,因此我们可以遍历列表 nums,将每个元素添加到集合中。如果添加过程中发现元素已经存在于集合中,则说明存在重复元素。

下面是一个简单的示例代码:
def has_duplicate(nums):    num_set = set()    for num in nums:        if num in num_set:            return True        num_set.add(num)    return False# 测试代码nums1 = [1, 2, 3, 4, 5]print(has_duplicate(nums1))  # Falsenums2 = [1, 2, 3, 4, 2]print(has_duplicate(nums2))  # True
这个方法的时间复杂度为 O(n),其中 n 是列表中元素的个数。我们只需要遍历一次列表,并在集合中查找元素的操作具有 O(1) 的平均时间复杂度,因此总体时间复杂度为 O(n)。

希望这次回答能够帮到您,如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 10:00:44 | 显示全部楼层
你的代码我并没有发先有什么问题,我猜测你是理解的两个相同值之间的间隔要>k,但程序是两个相同值之间的间隔<=k,而导致你觉得程序有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 12:25:21 | 显示全部楼层
nums 的下标是从哪里开始的,搞对了吗。

然后 abs 在 math 库里面,#include 了吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表