zoukankan      html  css  js  c++  java
  • 剑指offer 面试57题

    面试57题:

    题目:和为s的数字

    题目描述

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
     
    输出描述:
    对应每个测试案例,输出两个数,小的先输出。

    解题思路:使用while循环从两端向中间扫描数组,时间复杂度为O(n)

    解题代码:

    # -*- coding:utf-8 -*-
    class Solution:
        def FindNumbersWithSum(self, array, tsum):
            # write code here
            if len(array)<2:
                return []
            found=False
            fst,lst=0,len(array)-1
            while fst<lst:
                sum_total=array[fst]+array[lst]
                if sum_total==tsum:
                    found=True
                    return [array[fst],array[lst]]
                elif sum_total<tsum:
                    fst +=1
                else:
                    lst -=1
            return []

    拓展题目:

    题:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

    解题思路同上。

    代码如下:

    # -*- coding:utf-8 -*-
    class Solution:
        def FindContinuousSequence(self, tsum):
            # write code 
            if tsum<3:
                return []
            small,big=1,2
            middle=(tsum+1)//2
            curSum=small+big
            res=[]
    
            while (small<middle):
                if curSum==tsum:
                    res.append(list(range(small,big+1)))
                while(curSum>tsum and small<middle):
                    curSum -= small
                    small +=1
                    if curSum==tsum:
                        res.append(list(range(small,big+1)))
                big+=1
                curSum +=big
            return res



  • 相关阅读:
    java中switch的用法以及判断的类型有哪些(Stringyteshortintchar枚举类型)
    B/S架构和C/S架构介绍
    Vue通信的10种方式
    Restful风格接口浅析
    浅析 http 接口
    Vue中 let 关键字
    vue中v-model详解
    安装RabbitMQ服务器及基本配置
    redis 面试题
    JSP页面中<%!%>与<%%>与<%=%>详解
  • 原文地址:https://www.cnblogs.com/yanmk/p/9163435.html
Copyright © 2011-2022 走看看