zoukankan      html  css  js  c++  java
  • 【LeetCode】解题思路及最佳代码 -- Python3实现 -- 更新中

    目录:

    1. 双指针:167. 两数之和 II - 输入有序数组

    双指针:167. 两数之和 II - 输入有序数组 -- 2020-7-26

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。

    函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

    说明:
    返回的下标值(index1 和 index2)不是从零开始的。
    你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

    示例:
    输入: numbers = [2, 7, 11, 15], target = 9
    输出: [1,2]
    解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    双指针的题目还有:11,15,26等。

    解题思路

    这道题可以采用:
    1- 暴力搜索法:时间O(n^2), 空间O(1)
    2- 二分查找法:时间O(nlogn), 空间O(1)
    3- 双指针:时间O(n), 空间O(1)

    暴力搜索法没有利用题目中的数组有序特性,时间复杂度过高。
    二分查找法,第一个数是遍历O(n),第二个数在该数右侧二分查找O(logn)。
    双指针不是算法,是一种编程技巧,充分利用了题目条件进行了简单求解。

    代码

    class Solution:
        def twoSum(self, numbers: List[int], target: int) -> List[int]:
            left, right = 0, len(numbers)-1
            
            while(left < right):
                if numbers[left] + numbers[right] < target:
                    left+=1
                elif numbers[left] + numbers[right] > target:
                    right-=1
                else:
                    return [left+1, right+1]
    
            return [-1, -1]
    
  • 相关阅读:
    redis该怎么用
    cookie和session的比较
    web常见攻击
    请大神指导从大日志文件中统计关键字次数的办法
    apache中 MaxClients 与MaxRequestsPerChild
    如何提高缓存命中率
    CSU-ACM2018暑假集训比赛1
    CodeForces
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/yanqiang/p/13380944.html
Copyright © 2011-2022 走看看