zoukankan      html  css  js  c++  java
  • 剑指OFFER之和为S的两个数字

    题目描述:
    输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
    输入:
    每个测试案例包括两行:
    第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和。其中1 <= n <= 10^6,k为int
    第二行包含n个整数,每个数组均为int类型。
    输出:
    对应每个测试案例,输出两个数,小的先输出。如果找不到,则输出“-1 -1”
    样例输入:
    6 15
    1 2 4 7 11 15
    样例输出:
    4 11


    Code:
    #include <cstdio>
    #include <algorithm>
    #define INF 0x7fffffffffffffff   //考虑到long long 类型,8个字节
     
    using namespace std;
     
    int arr[1000010];
     
    int main()
    {
        int n,k,num1,num2;
        int *head,*tail;
        long long minVal;
        bool havaAnswer;
        while(scanf("%d%d",&n,&k)!=EOF){
            for(int i=0;i<n;++i){
                scanf("%d",&arr[i]);
            }
            head=arr;
            tail=arr+n-1;
            minVal=INF;
            havaAnswer=false;
            while(head<tail){
                if(*head+*tail==k){
                    havaAnswer=true;
                    if((long long)(*head)*(*tail)<minVal){
                        num1=*head;
                        num2=*tail;
                        minVal=(long long)(*head)*(*tail);
                    }
                    ++head;
                    --tail;
                }else{
                    if(*head+*tail<k){
                        ++head;
                    }else{
                        --tail;
                    }
                }
            }
            if(havaAnswer){
                int a=num1,b=num2;
                if(num1>num2){
                    a=num1;
                    b=num2;
                }
                printf("%d %d
    ",a,b);
            }else{
                printf("%d %d
    ",-1,-1);
            }
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1352
        User: lcyvino
        Language: C++
        Result: Accepted
        Time:1430 ms
        Memory:5424 kb
    ****************************************************************/
  • 相关阅读:
    2.搭建第一个http服务:三层架构
    1.基础入门
    MyISAM和InnoDB索引区别
    分区
    事务的四大特性
    事务
    String
    自己写native方法
    序列化和反序列化
    反射
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4214536.html
Copyright © 2011-2022 走看看