华为机考攻略(python)--入门题【5题】(第二题排列組合:NC61两数之和)

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、排列組合:NC61两数之和
  • 二、sound code
    • 1.sound code 1
    • 2.sound code 2
  • 总结


前言

一、排列組合:NC61两数之和

描述: 给出一个整型数组numbers和一个目标值target,请在数组中找出两个加起来等于目标值的数的下标,
返回的下标按升序排列(注:返回的数组下标从1算起,保证target一定可以由数组里面2个的数字相加得到)
数据范围: 2≤len(numbers)≤10**5
要求: 空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)
示例1:
输入:[3,2,4],6
返回值:[2,3]
说明:因为2+4=6,而2的下标为2,4的下标为3,所以返回[2,3]
示例2:
输入:[20,70,110,150],90
返回值:[1,2]
说明:20+70=90

二、sound code

1.sound code 1

代码如下(示例):

from typing import List
class Solution:
    def twoSum(self,numbers:List[int],target:int)->List[int]:
        tm={}
        res=[]
        for i ,v in enumerate(numbers):
            if v in tm:
                res.append(tm[v]+1)
                res.append(i+1)
            else:
                tm[target-v] = i 
        return res
#下面为测试案例
if __name__ == '__main__':
    s = Solution()
    s.twoSum([3,2,4],6)
    print(s.twoSum([3,2,4],6))

2.sound code 2

代码如下(示例):

from typing import List
class Solution:
    def twoSum(self , numbers , target ):
        result = [0, 0]
        mp = {}
        for i in range(len(numbers)):
            mp[numbers[i]] = i
            for i in range(len(numbers)):
                if target - numbers[i] in mp:
                    if mp[target - numbers[i]] != i:
                        result[0] = i + 1
                        result[1] = mp[target - numbers[i]] + 1
                        return sorted(result)
        return sorted(result)
if __name__ == '__main__':
    s = Solution()
    s.twoSum([3,2,4],6)
    print(s.twoSum([3,2,4],6))

总结

分享:
有了坚定的理想、清晰的目标和正确的价值取向,就不会随波逐流,就不会在意别人的眼光以及世俗的标准。
理想是人们心中的一轮太阳,如果我们耽于瞻望和等待,理想就永远是一轮止于仰望的太阳。

你可能感兴趣的:(Python,源码,华为机考攻略)