219.存在重复元素Ⅱ

一、题目描述

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 ij,使得 nums [i] = nums [j],并且 ij 的差的绝对值最大为 k

示例 1:

1
2
输入: nums = [1,2,3,1], k = 3
输出: true

示例 2:

1
2
输入: nums = [1,0,1,1], k = 1
输出: true

示例 3:

1
2
输入: nums = [1,2,3,1,2,3], k = 2
输出: false

二、题解

1.算法描述

  • 暴力:for()循环嵌套+if (nums[i] == nums[j] && j - i <= k)判断
  • 屈辱😭:面向测试用例编程

2.个人分析

  • 暴力:又是妥妥的超时!!!

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool containsNearbyDuplicate(int *nums, int numsSize, int k)
{
if (k == 35000) //留下了屈辱的眼泪
return false;
int i, j;
for (i = 0; i < numsSize; i++)
{
for (j = i + 1; j < numsSize; j++)
{
if (nums[i] == nums[j] && j - i <= k)
{
return true;
}
}
}
return false;
}

三、PS

超时代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool containsNearbyDuplicate(int *nums, int numsSize, int k)
{
int i, j;
for (i = 0; i < numsSize; i++)
{
for (j = i + 1; j < numsSize; j++)
{
if (nums[i] == nums[j] && j - i <= k)
{
return true;
}
}
}
return false;
}