• 二分思想判断数组中是否有两数和为sum


     1 /*
     2 一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum O(nlogn)
     3 解题思路:先排序 在左右夹击判断,类似二分查找的思想。 
     4 */
     5 #include <stdio.h>
     6 #include <stdlib.h>
     7 int find(int a[], int len, int sum, int *x, int *y)
     8 {
     9 
    10     int i = 0, j = len - 1;
    11 
    12     if (sum < a[0]) {
    13         return -1;
    14     }
    15 
    16     while (i != j) {
    17         if (a[i] + a[j] == sum) {
    18             *x = a[i]; *y = a[j];
    19             return 0;
    20         }
    21         else if (a[i] + a[j] > sum) {
    22             j--;
    23         }
    24         else {
    25             i++;
    26         }
    27 
    28     }
    29 
    30     return -1;
    31 }
    32 
    33 int cmp(const void *a,const void *b)
    34 {
    35     return (int *)a - (int *)b;     
    36 }
    37 
    38 int main()
    39 {
    40     int a[] = {1,3,5,7,9,11,25,26,30,35,50};
    41     int sum = 32, x = 0, y = 0;
    42     qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),cmp);
    43     for(sum = 0; sum < 86; sum++)
    44     {
    45         if (-1 != find(a, sizeof(a) / sizeof(a[0]), sum, &x, &y)) {
    46             printf("find: sum=%d, (%d, %d)\n", sum, x, y);
    47         }
    48         else {
    49             printf("Not find!\n");
    50         }
    51     }
    52     return 0;
    53 }
  • 相关阅读:
    普通变量和数组作为函数参数的区别
    2.1
    SQL NULL 值
    SQL ALTER TABLE 语句
    SQL CHECK 约束
    SQL LEFT JOIN 关键字
    SQL JOIN
    SQL Alias(别名)
    SQL 通配符
    从暴力中解脱,
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2956926.html
Copyright © 2020-2023  润新知