题目一:多数元素
思路:首先对数组长度下取整为n,接着定义变量count=1,表示此时有一个该元素,接着对数组进行排序,如果数组中就一个元素则该元素即为结果,否则,对数组进行遍历,判断该元素和下一个位置的元素是否相等,如果相等count++,当count>n时,该元素即为结果,返回该结果,如果不是,令count=1,接着循环。
代码:
public static int majorityElement(int[] nums) {
int n=nums.length/2;
int count=1;
int result=0;
Arrays.sort(nums);
if(n==0) {
result=nums[0];
}else {
for(int i=0;i<nums.length-1;i++) {
if(nums[i]==nums[i+1]) {
count++;
if(count>n) {
result=nums[i];
}
}else {
count=1;
}
}
}
return result;
}
运行成功截图:
题目二:数组中的k-diff数对
思路:首先定义一个map集合,接着对数组排序,利用双重循环遍历数组,如果i!=j,并且nums[i]-nums[j]=k,且nums[i]作为key不在集合中,则将其加入集合中,以达到去重效果。
代码:
public static int findPairs(int[] nums, int k) {
Map<Integer, Integer> map=new HashMap<Integer, Integer>();
int n=nums.length;
Arrays.sort(nums);
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(i!=j) {
if(nums[i]-nums[j]==k) {
if(!map.containsKey(nums[i])) {
map.put(nums[i], nums[j]);
}
}
}
}
}
return map.size();
}
运行成功截图: