zoukankan      html  css  js  c++  java
  • 3.18~InsertionSort And Pairs

    转载注明出处  http://www.cnblogs.com/ligun123/archive/2013/03/19/2969438.html

    先是跟着Hackerrank练习了下插入排序

    然后又做了Pairs,来源:https://www.hackerrank.com/challenges/pairs

    Given N numbers [N<=10^5], count the total pairs of numbers that have a difference of K. [K>0 and K<1e9]. Each of the N numbers will be > 0 and be less than K away from 2^31-1 (Everything can be done with 32 bit integers).

    Input Format:

    1st line contains N & K (integers).
    2nd line contains N numbers of the set. All the N numbers are assured to be distinct.

    Output Format:

    One integer saying the no of pairs of numbers that have a diff K.

    Sample Input #00:

    5 2
    1 5 3 4 2

    Sample Output #00:

    3

    Sample Input #01:

    10 1
    363374326 364147530 61825163 1073065718 1281246024 1399469912 428047635 491595254 879792181 1069262793 

    Sample Output #01:

    0

    一开始没读懂啥题,多了几遍才晓得,是计算有多少对这样的数,他们相差为K?

    可以先将原来的数组从小到大排序,然后查找其中每一个值(arr[i] + K)是否在这个数组中,是的话pairs +1,最后打印pairs

    //
    //  main.c
    //  InsertionSort  &  Pairs
    //
    //  Created by Kira on 3/18/13.
    //  Copyright (c) 2013 Kira. All rights reserved.
    //
    
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    #include <assert.h>
    
    /* Head ends here */
    void insertionSort(unsigned long int ar_size, unsigned long int * ar) {
        if (ar_size > 1) {
            insertionSort(ar_size-1, ar);
        }
        if (ar_size == 1) {
            return;
        }
        unsigned long int key = ar[ar_size-1];
        for (long long int i = ar_size -2; i >= 0; i --) {
            if (key < ar[i]) {
                ar[i +1] = ar[i];
            } else {
                ar[i +1] = key;
                break;
            }
            if (i ==0) {
                ar[i] = key;
            }
        }
    }
    
    int compare(const void *d1, const void *d2)
    {
        return *(int*)(d1) - *(int*)(d2);
    }
    
    /* Tail starts here */
    int main() {
        
        unsigned long int N = 0, K = 0, *array = NULL;
        scanf("%ld", &N);
        scanf("%ld", &K);
        array = calloc(N, sizeof(unsigned long));
        unsigned long int i = 0;
        while (i < N) {
            scanf("%ld", &array[i]);
    //        insertionSort(i +1, array);  //最开始用自己之前写的插入排序,结果时间复杂度不过关,然后替换成了系统的qsort
            i ++;
        }
        
        qsort(array, N, sizeof(unsigned long), compare);
        
        unsigned long int count = 0;
        for (int ii = 0; ii < N; ii ++) {
            unsigned long int key = array[ii] + K;
            unsigned long begin = ii +1;
            unsigned long end = N-1;
            while (begin <= end) {
                unsigned long int mid = (begin + end) /2;
                if (array[mid] < key) {
                    begin = mid+1;
                }
                else if (array[mid] > key) {
                    end = mid-1;
                }
                else if (array[mid] == key) {
                    count ++;
                    break;
                }
            }
        }
        
        free(array);
        array = NULL;
        
        printf("%ld", count);
        return 0;
    }
  • 相关阅读:
    【名称解释】#001 IIS名词解释
    【C#】#102 发送邮件
    【C#】#101 导入导出Excel
    【C#】#100 调用摄像头
    【转】【Flex】#010 操作XML文件(E4X)
    【Flex教程】#009 As/typeof /instanceof /is的作用
    4 权限组件、频率、3组件总结
    1 request模块
    4 saltstack ssh
    03 深入远程执行:target目标、模块modules、返回returns
  • 原文地址:https://www.cnblogs.com/ligun123/p/2969438.html
Copyright © 2011-2022 走看看