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

    题目描述

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

    返回值描述:

    对应每个测试案例,输出两个数,小的先输出。

    示例

    输入        [1,2,4,7,11,15],15

    返回值    [4,11]

    知识点回顾

    数学、数组、双指针

    代码

    解法一:暴力解题,双重循环,时间复杂度:O(n^2)

    # -*- coding:utf-8 -*-
    class Solution:
        def FindNumbersWithSum(self, array, tsum):
            # write code here
            lenth=len(array)
            for i in range(lenth):
                for j in range(i+1,lenth):
                    if array[i]+array[j]==tsum:
                        try:
                            if array[i]*array[j]<a*b:
                                a=array[i]
                                b=array[j]
                        except:
                            a=array[i]
                            b=array[j]
            try:
                return [a,b]
            except:
                return []

    解法二:双指针,时间复杂度:O(n)

    因为数组是有序的,所以可以用双指针,指向数组的首尾,具体步骤如下:
    1.初始化:指针i指向数组首, 指针j指向数组尾部
    2. 如果arr[i] + arr[j] == sum , 说明是可能解,同时++i、--j寻找下一组
    3. 否则如果arr[i] + arr[j] > sum, 说明和太大,所以--j
    4. 否则如果arr[i] + arr[j] < sum, 说明和太小,所以++i

    # -*- coding:utf-8 -*-
    class Solution:
        def FindNumbersWithSum(self, array, tsum):
            # write code here
            lenth=len(array)
            i,j=0,lenth-1
            while i<j:
                tmp=array[i]+array[j]
                if tmp==tsum:
                    try:
                        if array[i]*array[j]<a*b:
                            a=array[i]
                            b=array[j]
                    except:
                        a=array[i]
                        b=array[j]
                    i+=1
                    j-=1
                elif tmp<tsum:
                    i+=1
                else:
                    j-=1
            try:
                return [a,b]
            except:
                return []
  • 相关阅读:
    SharePoint母板页更改
    SharePoint的一些基本操作
    百度地图
    内存管理
    根据文字的个数,label自动适应高度
    navgationBar
    接收服务器上的图片,可以用webview或者 imageview
    iOS 自带的解析json的类。
    改变uilable uibutton等的字体颜色、大小。
    Nsstring和NSdata的编码转换
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14090316.html
Copyright © 2011-2022 走看看