zoukankan      html  css  js  c++  java
  • JZ42 和为S的两个数字

    和为S的两个数字

    题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

    思路:使用两个变量small和big分别表示数组的下标,small = 0,big = end,然后开始循环,如果两者对应的数组之和等于sum,那么比较一下乘积是否是目前位置最小的,是最小的就放入result数组中,然后移动small(一定要记得移动,不然死循环),如果大于sum,就--big,小于的话就++small。要使用一个是否找到这样的两个数的标志位flag,不然之前result初始化是两个0,没找到就会返回两个0,所以要进行判断,没找到就返回空数组。

    func FindNumbersWithSum(array []int, sum int) []int {
        result := []int{0, 0}
        if(len(array) < 2){
            return []int{}
        }
        
        flag := false
        small := 0
        big := len(array)- 1
        mul := math.MaxInt32
        for small < big {
            tmp := array[small] + array[big]
            if tmp == sum {
                if mul > array[small] * array[big] {
                    flag = true
                    mul = array[small] * array[big]
                    result[0] = array[small]
                    result[1] = array[big]                   
                }   
                small++
            } else if tmp > sum {
                big--
            } else {
                small++
            }
        }
        if(!flag){
            return []int{}
        }
        return result
    }
  • 相关阅读:
    CentOS 7.3 CDH 5.10.0 Druid0.12.4安装记录
    cloudera manager卸载流程
    CDH5.10.0 离线安装(共3节点) 转
    CentOS 7 安装Httpd(转)
    CentOS下MySQL的彻底卸载
    CentOS7 修改主机名
    sendEvent()
    QSignalMapper Class
    ubuntu12.04开启虚拟机的unity模式
    BCM_I2C函数更改
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14641458.html
Copyright © 2011-2022 走看看