leetcode刷题记录之961

961、重复 N 次的元素

  在大小为 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 为偶数

难度:简单  题目地址:https://leetcode-cn.com/problems/n-repeated-element-in-size-2n-array/

1、C语言代码:

int repeatedNTimes(int* A, int ASize){
    for(int i = 0;i < ASize - 1;i++){
        for(int j = i + 1; j < ASize;j++){
            if(A[i] == A[j])
                return A[i];
        }
    }
    return;
}

解释: 循环遍历数组,有元素重复出现的就一定是答案。

知识点回顾: 无。

2、Java代码:

class Solution {
    public int repeatedNTimes(int[] A) {
        for (int k = 1; k <= 3; ++k)
            for (int i = 0; i < A.length - k; ++i)
                if (A[i] == A[i+k])
                    return A[i];
        throw null;
    }
}

解释: 一旦找到一个重复元素,那么一定就是答案。我们称这个答案为主要元素。考虑所有长度为 4 的子序列,在子序列中一定至少含有两个主要元素。这是因为:长度为 2 的子序列中都是主要元素,或者;每个长度为 2 的子序列都恰好含有 1 个主要元素,这意味着长度为 4 的子序列一定含有 2 个主要元素。因此,只需要比较所有距离为 1,2 或者 3 的邻居元素即可。

知识点回顾: 无。

3、Python代码:

class Solution:
    def repeatedNTimes(self, A: List[int]) -> int:
        for i in A:
            if A.count(i)>=2:
                return i

解释: 循环遍历数组,有元素出现超过2次的就一定是答案。

知识点回顾: 无。

4、JavaScript代码:

/**
 * @param {number[]} A
 * @return {number}
 */
var repeatedNTimes = function(A) {
    let hash = new Map()
    for(num of A) {
        if(hash.has(num)) {
            return num
        } else {
            hash.set(num, 1)
        }
    }
};

解释: 数组大小2N,一共 N+1 个元素,目标元素出现N次,说明其他元素只出现一次。创建一个空的哈希表,遍历数组,如果当前元素出现2次,该元素为目标元素。

知识点回顾:
1、方法has() 返回一个bool值,用来表明map 中是否存在指定元素。
语法:myMap.has(key);
key:必填. 用来检测是否存在指定元素的键值。
返回值:如果指定元素存在于Map中,则返回true。其他情况返回false。
2、set() 方法为 Map 对象添加或更新一个指定了键(key)和值(value)的(新)键值对。
语法:myMap.set(key, value);
key:要添加至相应 Map 对象的元素的键。
value:要添加至相应 Map 对象的元素的值。
返回值:Map 对象。
3、for…of 语句创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for…of 循环,以替代 for…in 和 forEach() ,并支持新的迭代协议。for…of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。
语法:

for (variable of iterable) {
    statement
}

variable:每个迭代的属性值被分配给该变量。
iterable:一个具有可枚举属性并且可以迭代的对象。

你可能感兴趣的:(算法刷题)