Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j]and the difference between i and j is at most k.
题意:
在一个整型数组中查找是否存在相同的数值,要求两者的索引差小于等于给定的整数K。
C语言实现:
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
if(!nums || numsSize <= 0)
{
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;
}
该算法执行下来要1300ms以上,C语言没有HASHTABLE,所以实现起来的笨方法。
使用高级语言Python或者Java时,会方便并且高效的多,从网友那里看到的解法:
class Solution:
# @param {integer[]} nums
# @param {integer} k
# @return {boolean}
def containsNearbyDuplicate(self, nums, k):
numDict = dict()
for x in range(len(nums)):
idx = numDict.get(nums[x])
if idx >= 0 and x - idx <= k:
return True
numDict[nums[x]] = x
return False
该算法执行时间是33ms,相差好大,C语言在API方面用起来好LOW.