刷题leetcode--532. K-diff Pairs in an Array
2018-01-11 17:05
656 查看
532. K-diff Pairs in an Array
2018.1.11
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an
integer pair (i, j), where i and j are both numbers in the array and their absolute
difference is k.
Example 1:
Example 2:
Example 3:
Note:
The pairs (i, j) and (j, i) count as the same pair.
The length of the array won't exceed 10,000.
All the integers in the given input belong to the range: [-1e7, 1e7].
。
题意:给定参数:一个数组nums,一个值k,找出数组的项的差值为k的总个数。重复数的差值只算一次。
知识点:先排序,再数组遍历,可以采用滑动窗口的方法进行移动再比较。
解法一是常规方法
双层循环,从头到后遍历,因为已经排序,所以到差值为k的时候就停止此轮循环,break进入下一个。
解法二:用滑动窗口的方式,数组排序之后差是可以连续移动两个指针(left,right)得到的,这种方法同样要对相同的数字进行排除。
2018.1.11
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an
integer pair (i, j), where i and j are both numbers in the array and their absolute
difference is k.
Example 1:
Input: [3, 1, 4, 1, 5], k = 2 Output: 2 Explanation: There are two 2-diff pairs in the array, (1, 3) and (3, 5). Although we have two 1s in the input, we should only return the number of unique pairs.
Example 2:
Input:[1, 2, 3, 4, 5], k = 1 Output: 4 Exp ca43 lanation: There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).
Example 3:
Input: [1, 3, 1, 5, 4], k = 0 Output: 1 Explanation: There is one 0-diff pair in the array, (1, 1).
Note:
The pairs (i, j) and (j, i) count as the same pair.
The length of the array won't exceed 10,000.
All the integers in the given input belong to the range: [-1e7, 1e7].
。
题意:给定参数:一个数组nums,一个值k,找出数组的项的差值为k的总个数。重复数的差值只算一次。
知识点:先排序,再数组遍历,可以采用滑动窗口的方法进行移动再比较。
解法一是常规方法
双层循环,从头到后遍历,因为已经排序,所以到差值为k的时候就停止此轮循环,break进入下一个。
class Solution { public int findPairs(int[] nums, int k) { //方法一:先排序再相邻比较 Arrays.sort(nums); //排序 int res=0; //记录结果 for(int i=0;i<nums.length-1;i++){ for(int j=i+1;j<nums.length;j++) if(nums[j]-nums[i]==k){ res++; break; //结束本轮循环 } while(i<nums.length-1 && nums[i]==nums[i+1]) //相同的数字跳过 i++; } return res; } }
解法二:用滑动窗口的方式,数组排序之后差是可以连续移动两个指针(left,right)得到的,这种方法同样要对相同的数字进行排除。
class Solution { public int findPairs(int[] nums, int k) { //方法二,采用滑动窗口方法 if(k<0 || nums.length<=1) return 0; Arrays.sort(nums); int left=0; int right=1; int count=0; while(right<nums.length){ int first= nums[left]; int sec = nums[right]; if(sec-first<k) right++; else if(sec-first>k) left++; else{ count++; //跳过重复数字 while(left<nums.length && nums[left]==first){ left++; } while(right<nums.length && nums[right]==sec){ right++; } } if(right == left ){ right++; } } return count; } }
相关文章推荐
- leetcode 532. K-diff Pairs in an Array
- LeetCode 532. K-diff Pairs in an Array
- LeetCode - 532. K-diff Pairs in an Array
- leetcode 532. K-diff Pairs in an Array
- leetcode532. K-diff Pairs in an Array
- 【leetcode】532. K-diff Pairs in an Array(Python & C++)
- LeetCode 532. K-diff Pairs in an Array (在数组中相差k的配对)
- 【LeetCode】532. K-diff Pairs in an Array 解题报告
- 【Leetcode】532. K-diff Pairs in an Array
- 【leetcode】532. K-diff Pairs in an Array
- [Leetcode] 532. K-diff Pairs in an Array 解题报告
- leetcode 532. K-diff Pairs in an Array
- [leetcode] 532. K-diff Pairs in an Array
- leetcode题解-532. K-diff Pairs in an Array
- LeetCode-532. K-diff Pairs in an Array
- LeetCode 532. K-diff Pairs in an Array
- 【LeetCode】532. K-diff Pairs in an Array
- [LeetCode] 532. K-diff Pairs in an Array
- [leetcode]: 532. K-diff Pairs in an Array
- Leetcode 532. K-diff Pairs in an Array