当前位置:网站首页>LeetCode #167.两数之和 II - 输入有序数组
LeetCode #167.两数之和 II - 输入有序数组
2022-07-29 05:24:00 【张楚明ZCM】
题目截图

方法一:暴力法
两次循环即可找到对应数组。
暴力法会因为超时而无法通过测试。
注意:题目要求必须是唯一解,且不可以重复同一下标,所以出现答案是两个相同数字时,必须返回连个不同的下标。所以循环的时候外层设为i在0到n之间,内层设置为j在i+1到n之间。
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
ans = [0]*2
n = len(numbers)
for left in range(0, n):
for right in range(left+1, n):
if numbers[left]+numbers[right] == target:
ans=[left+1, right+1]
return ans完整测试代码
from typing import List
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
ans = [0]*2
n = len(numbers)
for left in range(0, n):
for right in range(left+1, n):
if numbers[left]+numbers[right] == target:
ans=[left+1, right+1]
return ans
class main:
a = Solution()
numbers = [-1,0,4,4,6]
target = 8
b=a.twoSum(numbers, target)
print(b)
if __name__ == '__main__':
main()方法二:二分查找
也是利用内外两层循环,不同的是内层为二分法,这样时间复杂度可以降低。
外循环固定第一个数,然后内循环利用二分法找第二个数。
第一个数为i,左右分别i+1,和n-1。然后不断折中查找。
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
n = len(numbers)
for i in range(0, n):
left, right = i + 1, n - 1
while left <= right:
mid = (left + right)//2
if numbers[mid] == target-numbers[i]:
return [i+1, mid+1]
elif numbers[mid] > target-numbers[i]:
right = mid - 1
else:
left = mid + 1方法三:双指针
直接利用双指针,从两边向中间移动,只需要一层循环即可。大大降低了时间复杂度。
将左右指针设为0,和n-1,从两边向中间移动。如果发现相加值刚好等于目标值,则返回下标。题目给定下标从1开始,计算机下标从0开始,返回时记得下标+1。
如果发现相加值大于目标值,则右指针左移。反之,做指针右移。
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
n = len(numbers)
left, right = 0, n - 1
while left < right:
if numbers[left]+ numbers[right] == target:
return [left+1, right+1]
elif numbers[left]+ numbers[right] > target:
right -= 1
else:
left += 1边栏推荐
- SimpleFOC+PlatformIO踩坑之路
- 2022 spring move - core technology FPGA development post pen test question (original question and experience)
- 链表--------------------尾插法
- Zero basics FPGA (5): counter of sequential logic circuit design (with introduction to breathing lamp experiment and simple combinational logic design)
- scanBasePackages扫包范围配置
- Reading papers on false news detection (I): fake news detection using semi supervised graph revolutionary network
- From entry to soul: how to use tb6600 single chip microcomputer to control stepping motor with high precision (42/57)
- 多线程和并发
- 八大排序-----------------堆排序
- 【软件工程之美 - 专栏笔记】21 | 架构设计:普通程序员也能实现复杂系统?
猜你喜欢

扬尘噪声监控系统

Reading papers on false news detection (5): a semi supervised learning method for fake news detection in social media

【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?

Based on STM32: couple interactive doll (design scheme + source code +3d drawing +ad circuit)

CS5340国产替代DP5340多比特音频 A/D 转换器

【软件工程之美 - 专栏笔记】23 | 架构师:不想当架构师的程序员不是好程序员

【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议

markdown与Typora

Joiner.on和stream().map联合使用技巧

ABSA1: Attentional Encoder Network for Targeted Sentiment Classification
随机推荐
【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?
Zero basics FPGA (5): counter of sequential logic circuit design (with introduction to breathing lamp experiment and simple combinational logic design)
低成本2.4GHz 无线收发芯片--Ci24R1
【软件工程之美 - 专栏笔记】25 | 有哪些方法可以提高开发效率?
LoRa开启物联网新时代-ASR6500S、ASR6501/6502、ASR6505、ASR6601
进程与进程的概念
一些工具,插件,软件链接分享给大家~
Si12T和Si14T低功耗电容触摸芯片
STM32 串口乱码
NOI Online 2022普及组 题解&个人领悟
太原市公交路线爬取
关于【链式前向星】的自学理解
动态加载数据
Torch. NN. Parameter() function understanding
Pytorch's data reading mechanism
#7110 数字走向2 题解
封装——super关键字
给二维表添加时间序列索引
基于msp430f2491的proteus仿真(实现流水灯)
Design and implementation of QT learning notes data management system