字节跳动笔试题1——在n个元素的数组中,找到差值为k的数字对去重后的个数
开始想的方法一和方法二排序去重均漏掉了下列输入输出情况
输入 :4 0
1 2 1 2
正确输出:2
方法一方法二输出:0 (去重了)
package Findwork;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
public class Kchazhi {
public static void main(String[] args) {
Scanner s1=new Scanner(System.in);
int length=s1.nextInt();
int arr[]=new int [length];
int k= s1.nextInt();
for (int i=0;i<length;i++) {
arr[i]=s1.nextInt();
}
for (int i : arr) {
System.out.print(i+" ");
}
System.out.println();
printK(arr, k);
s1.close();
/*int arr[]= {0,9,3,6,4,5,2,8,7,1};
printK(arr, 4);*/
}
public static void printK(int arr[],int k) {
int count=1;
HashMap<Integer,Integer> hm = new HashMap<>();
//把数放进hashMap
for(int i=0; i<arr.length;i++) {
if (!hm.containsKey( arr[i] )) {
hm.put(arr[i], 1);
}else {
count++;
hm.put(arr[i], count);
}
}
Iterator i1=hm.keySet().iterator();
int res=0;
while(i1.hasNext()) {
int index =(Integer)i1.next();
if (hm.containsKey(index+k)) {
//输出差值为K的数对
/* System.out.print(index+" "+(index+k));
System.out.println();*/
res++; //统计去重之后的K差数值的条目数
}
}
System.out.println(res);
}
}