https://leetcode.com/problems/contains-duplicate-ii/
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.
这道题目源自 [Contains Duplicate] (http://blog.csdn.net/hemmingway/article/details/52003577)
不同的是查找到的两个相同元素的下标距离不能超过给定的参数K。所以可以把上个题目改进一下,创建一个index数组,将nums数组元素排序前后的index关系映射存储起来,比如有个元素3的原先的下标是 i,排序过后的下表到了数组的位置j, 则有 index[j]=i;
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {int i, j, key;int *index = (int *)malloc(numsSize * sizeof(int)); // store index//memset(index, 0, numsSize * sizeof(int));for(i = 1; i < numsSize; ++i) {j = i - 1;key = nums[i];while(j > 0 && nums[j] > key) {nums[j + 1] = nums[j]; // move to backindex[j + 1] = index[j];j--;}//if(j != (i-1)) //{nums[j + 1] = key;index[j + 1] = i; // map new index to old//}/* check */if((nums[j] == key) && (i - index[j] <= k)) return true;}free(index);return false;
}