LeetCode Contains Duplicate III
来源:互联网 发布:软件外包学校 编辑:程序博客网 时间:2024/05/11 13:04
LeetCode Contains Duplicate III
题目
思路
我的方法是先用一个结构体,存下每个数字的值和其原坐标;
然后根据值大小排序;
接着遍历每一个数字num[i].val;
利用二分查找找到刚好比num[i].val - t - 1大的数字的坐标;
然后根据坐标判断是否存在值即可;
关于二分查找可见:Binary Search
代码
struct num { int pos, val;};int AD(struct num * nums, int l, int r) { int K = nums[l].val; int Kp = nums[l].pos; while (l < r) { while (l < r && nums[r].val > K) r--; if (l < r) nums[l++] = nums[r]; while (l < r && nums[l].val < K) l++; if (l < r) nums[r--] = nums[l]; } nums[l].val = K; nums[l].pos = Kp; return l;}void QS(struct num * nums, int l, int r) { if (l < r) { int mid = AD(nums, l, r); QS(nums, l, mid - 1); QS(nums, mid + 1, r); }}// 在不下降的序列中寻找恰好比target大的数出现位置,也即第一个比target大的数出现的位置int binarySearchIncreaseFirstBigger(struct num * nums, int l, int r, int target) { if (r - l + 1 == 0) return -1; while (l < r) { int m = l + ((r - l) >> 1); if (nums[m].val <= target) l = m + 1; else r = m; } if (nums[r].val > target) return r; else return -1;}bool containsNearbyAlmostDuplicate(int* nums, int numsSize, int k, int t) { struct num * N = (struct num*)malloc(sizeof(struct num) * numsSize); for (int i = 0; i < numsSize; i++) N[i].pos = i, N[i].val = nums[i]; QS(N, 0, numsSize - 1); for (int i = 1; i < numsSize; i++) { int minPos = binarySearchIncreaseFirstBigger(N, 0, i - 1, N[i].val - t - 1); if (minPos == -1) { } else { for (int j = minPos; j < i; j++) { if (abs(N[i].pos - N[j].pos) <= k) { free(N); return true; } } } } free(N); return false;}
1 2
- leetcode - Contains Duplicate III
- [leetcode] Contains Duplicate III
- LeetCode Contains Duplicate III
- LeetCode Contains Duplicate III
- [LeetCode] Contains Duplicate III
- LeetCode Contains Duplicate III
- LeetCode | Contains Duplicate III
- LeetCode Contains Duplicate III
- leetcode: Contains Duplicate III
- Leetcode: Contains Duplicate III
- leetcode--Contains Duplicate III
- [Leetcode]Contains Duplicate III
- leetcode:Contains Duplicate III
- *LeetCode-Contains Duplicate III
- leetcode | Contains Duplicate III
- LeetCode-Contains Duplicate III
- LeetCode-Contains Duplicate III
- leetcode contains duplicate III
- Pi opencv instrall
- Java加密算法 RSA
- PI OPENCV 无法初始化
- Java加密算法 AES
- 一切成功源于积累——20150606 美国非农5分钟k线直至收盘 各货币对表现 强劲好于预期
- LeetCode Contains Duplicate III
- MySQLdb模块用法实例
- mysql数据库delete数据时不支持表别名
- Java加密技术(二)对称加密算法DES&AES
- DllRegisterServer返回错误码0x8002801c
- 叹,你只是过客。
- GPS(ublox MAX 7c)移植 (飞思卡尔 IMX6 Android4.3平台)
- 关于构造,析构,拷贝构造函数,
- 人工智能领域如何适应当下网络的高速发展?