zoukankan      html  css  js  c++  java
  • 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。

    第 14 题(数组):
    题目:输入一个已经按升序排序过的数组和一个数字,
    在数组中查找两个数,使得它们的和正好是输入的那个数字。
    要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
    例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11。

    要求时间是O(n)肯定就只能扫描一遍。 又有两个数字要找,那就只能一个从头向后找 一个从后向前找 初始把大值设为最后一个数, 小值设为第一个数,如果数字和大于和,则减小大数的数值, 反之增大小数字的数值。 收缩直至数字相遇或者找到合适解。

    /*
    第 14 题(数组):
    题目:输入一个已经按升序排序过的数组和一个数字,
    在数组中查找两个数,使得它们的和正好是输入的那个数字。
    要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
    例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11。
    */
    
    #include<stdio.h>
    
    int findsum(int * in, int len, int sum) //输入数组 数组长度 和
    {
        int i, j;
        for(i = 0, j = len - 1; i < j; )
        {
            if(in[i] + in[j] == sum)
            {
                printf("%d = %d + %d" , sum, in[i], in[j]);
                return 1;
            }
            else if(in[i] + in[j] < sum)
            {
                i++;
            }
            else
            {
                j--;
            }
        }
        printf("no answer");
        return 0;  
    }
    
    int main()
    {
        int a[20] = {1,2,4,7,11,15};
        int n = 6;
         findsum(a, n, 15);
        return 0;
    }
  • 相关阅读:
    关于flask-sesson
    自己动手写出静态网站与动态网站
    支付宝支付
    Scanner
    JAVA编程
    《剑指offer》经典面试50题
    java程序员常见面试题
    Java面试题(一) String相关
    Java集合总览
    写好Java代码的30条经验总结
  • 原文地址:https://www.cnblogs.com/dplearning/p/3895217.html
Copyright © 2011-2022 走看看