Two Sum,3Sum,3Sum Closest,4Sum

Two Sum

用哈希表,一边建立一边搜索,应该是O(n)

python中有内置set类,还有dict类等可以方便使用,注意查看官方文档


3Sum

首先猜测应该是O(n^2), 那么就可以用排序O(nlogn),再搜索O(n^2),一个指针p从最前面开始遍历,对于p的每一个位置,有两个指针 i,j 在其后,根据和的大小从两端向中间夹


3Sum Closest

过程与 3Sum 相同,只是记录的信息不同


4Sum

O(n^3)的方法就不说了,利用空间为O(n^2)的哈希表可以改进为时间复杂度为O(n^2)到O(n^3)之间

首先对所有数排序O(nlogn),建立一个字典dict,记录两两相加的所有和以及得到该和值的两个数字的位置数对,O(n^2) / O(n^2)

再次 O(n^2) 遍历,每一次求出两个数的和,记为 sum, 再在dict 中查找 target - sum,如果存在,查看存储的数对是否在求sum所用的数对的后面(保证题目要求abcd

如果在后面,则这四个数字组成一组答案

挑出所有的答案,并去除重复即可(其中去重复的时间复杂度不清楚,总体时间复杂度应该是: O(n^2) 乘 (去重复复杂度))

发布了68 篇原创文章 · 获赞 0 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章