此为 LeetCode 上数组相关练习题:【442. 数组中重复的数据

题目描述

找出数组 arr 中重复出现过的元素(不用考虑返回顺序)

  • 样例一

    • 输入:1,2,4,4,3,3,1,5,3
    • 输出:1,3,4
  • 样例二

    • 输入:1,2,2,2,2,2
    • 输出:2

请设计JavaScript代码实现上述逻辑:

1
2
3
const findRepeatItem = function (arr) {
return ____;
}

解题思路

  1. 给输入数组排序.sort()
  2. 设置一个flag作为标记变量
  3. 循环遍历输入数组,若flag(上一个循环中被赋值为了数组的上个元素)与遍历时的数组元素相同,说明该数字重复,将其添加进输出数组resArr中即可。
  4. 判断语句中添加条件 flag != resArrEnd 防止某数字在输入数组中出现2次以上导致输出数组中出现重复数字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
arr = [1,2,4,4,3,3,1,5,3]   // 输入数组
// console.log(arr)

const findRepeatItem = function (arr) {
arr.sort(); // 排序
// console.log(arr);
resArr = []; // 输出数组
let flag = ''; // 标记变量

for (i in arr) {
// 获取输出数组最后的元素,防止下方将重复数字添加到输出数组
resArrEnd = resArr[resArr.length-1];

// 由于flag为空,第一次不执行if语句
if (flag == arr[i] && flag != resArrEnd) {
// console.log(flag, '重复啦');
resArr.push(flag);
}

flag = arr[i]; // 标记变量赋值
}

// console.log(resArr)
return resArr;
}

console.log(findRepeatItem(arr))

提交代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const findRepeatItem = function (arr) {
arr.sort();
resArr = [];
let flag = '';

for (i in arr) {
resArrEnd = resArr[resArr.length-1];
if (flag == arr[i] && flag != resArrEnd) {
resArr.push(flag);
}

flag = arr[i];
}

return resArr;
}

【参考内容】: