小编Sah*_*pta的帖子

找到差值为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<len-1;i++){
    temp=a[i]+k;
    beg=i+1;  
    end=len-1;
        for(int l=beg;l<len;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;
}
Run Code Online (Sandbox Code Playgroud)

第二种方法代码:

static int pairs(int[] a,int k) {
  /* Complete this …
Run Code Online (Sandbox Code Playgroud)

java algorithm optimization search

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

algorithm ×1

java ×1

optimization ×1

search ×1