python重复字符串n次_LeetCode 961.重复 N 次的元素

dc44ef2286da11e52e68dcf0f66385ee.png

961.重复 N 次的元素

Loading...​leetcode.com
06eb75e605b153642cba796eb14e0622.png
在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。
返回重复了 N 次的那个元素。
示例 1:
输入:[1,2,3,3]
输出:3
示例 2:
输入:[2,1,2,5,3,2]
输出:2
示例 3:
输入:[5,1,5,2,5,3,5,4]
输出:5
提示:
4 <= A.length <= 10000
0 <= A[i] < 10000
A.length 为偶数

第一种解法,因为数据集中在 0 ~ 10000 的范围,所以可以用「桶排序」思想解题。建立一个长度 10000 的数组,数据全部初始化为 0。每当有数据落入桶中则让数据 +1。当所有数据落入桶中后。检查是哪个数据等于 N ,同时输出该数据索引。
时间复杂度为 O(n),但是当数据量小是过于浪费空间复杂度。参考 LeetCode 的英文社区 看到了 @zhaoyaoqiong 答案

int repeatedNTimes(int* A, int ASize) {
int tempNums[10000] = { 0 },i=0;
    for (; i < ASize; i++)
        tempNums[*(A + i)]++;
    for (i = 0; i < 10000; i++)
        if (tempNums[i] == ASize / 2)
            break;
return i;
}

解法二,先分析清楚题目,在 2N+1 长度的数组中有 N+1 个元素,某个元素有 N 个重复,所以当某个元素重复 2 次即该元素就是我们题中要找的元素。且该元素彼此间隔的最小长度不超过 2(),而最优情况为间隔为 1(稍微理清下思路应该能理解)。
节省了空间复杂度,同时时间复杂度为 O(n)

int repeatedNTimes(int* A, int ASize) {
    int i;
    for (i = 0; i < ASize - 1; i++)
        if (A[i] == A[i + 1] || A[i] == A[i + 2]||A[i]==A[i+3])
            break;
    return A[i];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值