JAVA查找数组中的元素K,java – 查找数组中差异为k的对数的最佳方法

我正在解决hackerrank的问题.我脑子里有两种方法:

输入:未排序的数组(a)和k

第一种方法:

1)对数组进行排序

2)对于每个数组元素a [i],使用二分搜索找到元素a [i] K.If发现计数增加并打破内循环.

第二种方法:

1)对数组进行排序

2)对于每个数组元素a [i],使用linearsearch找到元素a [i] K.If发现递增计数并打破内部循环.

我发现第一种方法更好,因为它将解决n(logn)中的问题.但是当解决方案中存在多个测试用例时,方法2需要较少的时间.有人可以解释一下原因吗?

以下是两种方法的代码:

第一种方法代码:

static int pairs(int[] a,int k) {

/* Complete this function */

int temp;

int len=a.length;

int count=0;

int beg;

int mid;

int end;

int midVal;

Arrays.sort(a);

for(int i=0;i

temp=a[i]+k;

beg=i+1;

end=len-1;

for(int l=beg;l

mid=(beg+end)/2;

midVal=a[mid];

if(midVal==temp){

count++;

break;

}

else if(midVal>temp){

end=mid-1;

}

else{

beg=mid+1;

}

}

}

return count;

}

第二种方法代码:

static int pairs(int[] a,int k) {

/* Complete this function */

int temp;

int len=a.length;

int count=0;

Arrays.sort(a);

for(int i=0;i

temp=a[i];

for(int j=i+1;j

if(temp-a[j]==-k){

count++;

break;

}

}

}

return count;

}

解决方法:

第一种方法是两者中最好的方法,但有比两者更好的方法: –

这里有一个伪代码,用于更好的方法: –

for(i=0;i

Hashmap.add(Arr[i])

}

count=0;

for(j=0;j

if(Hashmap.containsKey(Arr[j]+k))

count++;

}

时间复杂度:O(N)

而你的方法= O(NlogN)

编辑:-

注意: – 我的方法对Hash表有额外的空间复杂度O(N),而建议的方法就位.

标签:java,search,algorithm,optimization

来源: https://codeday.me/bug/20190825/1718309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值