首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LeetCode 454: 四数相加 II 4Sum II

为了使问题简单化,所有的 A, B, C, D 具有相同长度 N 0 ≤ N ≤ 500 。所有整数范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。...时间复杂度 O(n^4) 优化一: 使用一个哈希集合存储其中一个数组, 三层 for 循环把剩下三个数组组合都过一遍, 并查询哈希集合是否存在能满足条件元素值存在....时间复杂度 O(n^3) 优化二: 使用一个哈希映射, key 两个数组中元素组合值之和, value 两数值出现次数(因为任意元素组合之和可能相同), 两层 for 循环将剩余两个数组所有组合过一遍..., 找到满足条件 key , 总次数与对应 value 值累加, 最优解, 时间复杂度 O(n^2) 哈希映射解题: Java: class Solution { public int fourSumCount...(-c-d, 0) # 找到满足条件 key , 总次数与对应 value 值累加 (因为value 代表 A, B 数组符合条件组合次数) return count

63520

leetcode454. 4Sum II

To make problem a bit easier, all A, B, C, D have same length of N where 0 ≤ N ≤ 500....1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0 现有四个等长无序整数数组,先要求从这四个数组中分别取一个数字,使得它们...0,问这四个数组中共有多少满足条件数字集合。...思路代码 采用一些归并排序思路,假如我们将A,B所有数字排列组合能够构成结果计算出来,再将CD所有数字排列组合结果计算出来,则只需要针对AB值找到CD是否有对应负数存在即可。...,其实我们无序将CD元素也保存下来,只需要每次在计算CD元素时候直接去AB查找有无对应负数即可。

26110
您找到你想要的搜索结果了吗?
是的
没有找到

几道散列(哈希)表有关面试题

题目描述 给定一个包含 n 个整数数组 nums,判断 nums 是否存在三个元素 a,bc ,使得 a + b + c = 0 ?找出所有满足条件且不重复三元组。...也就是说需要枚举 a b ,将 c 存入 map 即可。 需要注意是返回结果,不能有有重复结果。这样代码时间复杂度O(n^2)。...在这里可以先将原数组进行排序,然后再遍历排序后数组,这样就可以使用双指针以线性时间复杂度来遍历所有满足题意两个数组合。...你可以假设 n 最大为 500,所有坐标在闭区间 [-10000, 10000] 。 题目解析 n 最大为 500,可以使用时间复杂度 O(n^2)算法。...为了使问题简单化,所有的 A, B, C, D 具有相同长度 N 0 ≤ N ≤ 500 。所有整数范围在 -2^28 到 2^28- 1 之间,最终结果不会超过 2^31 - 1 。

1.3K20

Java面试题:ArrayList底层实现原理、HashMap实现原理、HashMapjdk1.7jdk1.8有什么区别

时间复杂度O(1);其他部分增删需要挪动数组时间复杂度O(n)LinkedList头尾节点增删时间复杂度O(1),其他都需要遍历链表,时间复杂度O(n)3)内存空间占用ArrayList底层是数组...O(1),平均查询时间复杂度O(n)增删操作:头尾结点增删时间复杂度O(1),给定节点增删时间复杂度O(1),其他部分结点增删时间复杂度O(n)查询...O(n),给定节点O(1)头尾O(1),其他O(n),给定节点O(1)二、HashMap相关面试题在HashMap最重要一个数据结构就是散列表,在散列表使用到了红黑树链表。...,那么它子节点必须是黑色(不能出现两个红色节点相连情况)每一个节点,从该节点到其所有后代叶节点简单路径上,均包含相同数目的黑色节点查找、添加、删除时间复杂度都是O(n)。...,查询时间复杂度就从 O(1) 退化为 O(n)将链表法链表改造其他高效动态数据结构,比如红黑树,查询时间复杂度O(logn)2.2 HashMap源码分析(底层实现)我们分析源码 主要从以下几个方面来考虑

12000

搞定大厂算法面试之leetcode精讲16.set&map

复杂度分析:时间复杂度O(n^2), n数组长度。空间复杂度O(1)。...首先还是遍历nums数组,然后在哈希表寻找target-x,如果不存在就把当前元素x下标存入哈希表,如果存在就返回target-x当前元素下标 复杂度分析:时间复杂度O(n), n数组长度,...四数相加 II( medium) 方法1:哈希表 思路:在AB取出两个数组合,将这两个数作为键,出现次数作为值加入哈希表,循环CD,判断CD是否存在两个数AB俩元素正好是...of D) { if (countAB.has(-u - v)) {//判断CD是否存在两个数AB俩元素正好是0 ans...,可以对每个字符串统计其中字符频次,将每个字符频次相同字符串放在一组 复杂度时间复杂度O(n*k),n是字符串个数,k是最长字符串长度,循环字符串数组复杂度O(n),每个字符串统计频次复杂度O(

71250

LeetCode通关:哈希表六连,这个还真有点简单

例如,吴零、熊大、王二、张三、李四,我们可以把他们放到桶数组对应位置。 那么查找时候,我们根据对应名字编号,直接去找数组下标就行了,这样一来,时间复杂度就是O(1)。 ?...时间复杂度O(n) ? 空间复杂度O(n) LeetCode1002. 查找常用字符 ☕ 题目:1002....为了使问题简单化,所有的 A, B, C, D 具有相同长度 N 0 ≤ N ≤ 500 。所有整数范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。...遍历大AB数组,统计两个数组元素之和,出现次数,放到map。 定义int变量count,用来统计a+b+c+d = 0 出现次数。...时间复杂度O(n) ? 空间复杂度O(n) LeetCode202. 快乐数 ☕ 题目:202.

31940

程序员必须了解数据结构:Array、HashMap 与 List

当你想查找某个元素时,你可以直接打开对应编号匣子(时间复杂度O(1))。然而,如果你忘记了匣子里存着什么,就必须逐个打开所有的匣子(时间复杂度 O(n)),直到找到所需东西。数组也是如此。...而在 Java 、 CC ++ 之类强类型语言中,你必须在使用数组之前,定好它长度与数据类型。...for 循环,那么: 在数组查找元素时间复杂度O(n) 1.5 在数组删除元素 你觉得从数组删除元素时间复杂度是什么呢?...先来看看容量是如何影响 HashMap 表现。 如果初始容量是1,那么所有的键值都会被存入同一个桶,即桶#0。查找操作并不比纯粹用数组存储数据时间复杂度简单,它们都是 O(n)。...在链表查找一个元素,时间复杂度O(n) 单向链表操作方法时间复杂度 在下表,小结了单向链表(方法)时间复杂度: ?

1.6K10

初学者应该了解数据结构:Array、HashMap 与 List

当你想查找某个元素时,你可以直接打开对应编号匣子(时间复杂度 O(1))。然而,如果你忘记了匣子里存着什么,就必须逐个打开所有的匣子(时间复杂度 O(n)),直到找到所需东西。数组也是如此。...而在 Java 、 CC ++ 之类强类型语言中,你必须在使用数组之前,定好它长度与数据类型。JavaScript 会在需要时自动增加数组长度。...for 循环,那么: 在数组查找元素时间复杂度O(n) 在数组删除元素 ---- 你觉得从数组删除元素时间复杂度是什么呢?...先来看看容量是如何影响 HashMap 表现。 如果初始容量是1,那么所有的键值都会被存入同一个桶,即桶#0。查找操作并不比纯粹用数组存储数据时间复杂度简单,它们都是 O(n)。...它们区别是集合元素是唯一。 我们该如何实现一个集合呢(也就是没有重复项数组)?可以使用数组实现,在插入新元素前先检查该元素是否存在。但检查是否存在时间复杂度O(n)。能对此进行优化吗?

1K20

redis灵魂拷问:聊一聊redis底层数据结构

所以,压缩列表时间复杂度数组一样,都是o(n)。它优势是实现了压缩存储。 关于hash表 hash表这种数据结构我们并不陌生,尤其是我们java程序员,HashMap可以说是面试高频考题。...2.hash冲突 redis处理hash冲突方法使用是链表法,即如果2个keyhashcode一样,则在同一个hash桶中用一个链表组织起来,链表查找时间复杂度o(n),所以当hash桶元素越来越多时...但是通过key查找到对应value后,对于value是压缩列表、整形数组、双向链表情况,时间复杂度都是o(n),性能还是比较差。为了提高性能,redis引入了跳表这种数据结构。...对于redislist数据类型,它用到了压缩列表双向链表,时间复杂度o(n),我们做随机读写是不太合适,但是poppush效率高,作为队列是很好选择。...数组压缩列表虽然查询复杂度高,但是都是连续内存空间,对内存存储和缓存还是非常友好。 最后,个人redis理解有限,欢迎大佬们批评指正。

42610

LeetCode 周赛上分之旅 #45 精妙 O(lgn) 扫描算法与树上 DP 问题

数组长度 n ,最大匹配对数 k : 结论 1: 使用数组左半部分作为 nums[i] 使用数组右半部分作为 nums[j] 总能取到最优解。...题解三(众数) 由于题目的操作只要满足 nums[i] < nums[j] ,即两个数不相等即可,那么问题解最终仅取决于数组众数出现次数: 如果众数出现次数比其他元素少,那么所有元素都能删除...: 时间复杂度O(n) 线性遍历; 空间复杂度O(1) 仅使用常量级别空间。...: 时间复杂度O(lgn) 单次二分查找时间复杂度O(lgn) ; 空间复杂度O(1) 仅使用常量级别空间。...: 时间复杂度O(n) DFS 换根 DP 都是 O(n) ; 空间复杂度O(n)

31630

数据结构(1):顺序表(下)

reverse(r, 0, n-1) 上述算法中三个 reverse 函数时间复杂度分别为 O(p/2)、O((n-p)/2) O(n/2),故所设计算法时间复杂度 O(n),空间复杂度 O...# 舍弃 b 中间点及中间点以前部分 return a[s1]if a[s1] < b[s2]else b[s2] 算法时间复杂度 O(log₂n),空间复杂度 O(1)。...return c return-1 # 不存在主元素 实现程序时间复杂度 O(n),空间复杂度 O(1)。... A 遍历结束后,开始遍历数组 B,若能查找到第一个满足 B[i]==0 下标 i,返回 i+1 即为结果,此时说明 A 未出现最小正整数在 1~n 之间。...:遍历 A 一次,遍历 B 一次,两次循环内操作步骤 O(1) 量级,因此时间复杂度 O(n)。

61230

解决ANR、JVM、Serializable与Parcelable、红黑树、一道算法题

基于二叉查找这种特点,我们在查找某个节点时候,可以采取类似于二分查找思想,快速找到某个节点。n 个节点二叉查找树,正常情况下,查找时间复杂度 O(logn)。...这种情况也是满足二叉查找条件,然而,此时二叉查找树已经近似退化为一条链表,这样二叉查找查找时间复杂度顿时变成了 O(n),可想而知,我们必须不能让这种情况发生,为了解决这个问题,于是我们引申出了平衡二叉树...对于有 n 个节点平衡树,最坏查找时间复杂度 O(logn)。 为什么有了平衡树还需要红黑树?...05 算法 - 查找数 题目: 在有序数组[1,3,4,5,12,15,18,19,21,25,31]查找两个数,使得它们正好是30,时间复杂度O(n),说出解题思路?...二分法查找;从第一个角标开始,计算差值,然后二分法查找数组,寻找是否存在有满足需求数,没有就向右移动角标 所有数字存进 map,遍历查找 map 是否存在当前元素与 30 差值,存在就说明两数之和

44820

数据结构-概述

题目答案: 1.(1)可以将这个问题看作是把数组ab转换成数组ba(a代表前p个元素,b代表数组余下n-p个元素),先将a逆置得到a-1b,再将b逆置,最后将ab逆置。...O((n-p)/2)O(n/2),故所设计算法时间复杂度O(n),空间复杂度O(1) 另外,可以使用大小p辅助数组,先将左边p个元素导入,再将n-p个元素左移,再放回去。...A[s1]:B[s2]; } (3)算法时间复杂度O(log2n),空间复杂度O(1) 3.(1)给出算法基本设计思想: 算法策略是从前向后扫描数组元素,标记出一个可能成为主元素元素Num。...需要遍历链表,时间复杂度O(n) 4.按值查找表结点。同样需要遍历,时间复杂度O(n) 5.插入结点操作:将值x结点插入到单链表第i个位置上,主要开销在查找i-1个元素上,时间复杂度O(n)。...效率: 空间效率:一趟排序需要辅助存储空间r(r个队列),但以后排序重复使用这些队列,所以基数排序空间复杂度O(r) 时间复杂度d趟分配收集,一趟分配需要O(n),一趟收集需要O(r),

1.5K10

数据结构面试题以及答案整理

如果从第i个位置插入多个元素,对于数组来说每一次插入都需要往后移动元素,每一次时间复杂度都是O(n),而单链表来说只需要在第一次寻找i位置时时间复杂度O(n),其余插入删除操作时间复杂度均为O...=0)则查找成功,设置哨兵位置是为了加快执行速度,时间复杂度O(n),其特点是:结构简单,顺序结构链式式结构都适用,但查找效率太低。...优点是:大文件效率明显提高,但对小文件效率不明显。时间复杂度O(nlog2n),空间复杂度O(1)。...(9)基数排序:时间复杂度:对于n个记录进行链式基数排序时间复杂度O(d(n+rd)),其中每一趟分配时间复杂度O(n),回收时间复杂度O(rd)。 “前小后大”规则进行交换。...(9)基数排序:时间复杂度:对于n个记录进行链式基数排序时间复杂度O(d(n+rd)),其中每一趟分配时间复杂度O(n),回收时间复杂度O(rd)。

60230

精读《算法基础数据结构》

相应查找效率就低了,因为存储空间不是连续,所以无法像数组一样通过下标直接查找,而需要通过指针不断搜索,所以查找效率 O(n)。...但在最坏情况会降级 O(n),原因是多次操作后,二叉搜索树可能不再平衡,最后退化为一个链表,就变成了链表时间复杂度。...对于数据结构组合,我举两个例子: 第一个例子是如何O(1) 平均时间复杂度查询一个栈最大或最小值。...第二个例子是如何提升链表查找效率,可以通过哈希表与链表结合思路,通过空间换时间方式,用哈希表快速定位任意值在链表位置,就可以通过空间翻倍牺牲换来插入、删除、查询时间复杂度均为 O(1)。...虽然哈希表就能达到这个时间复杂度,但哈希表是无序;虽然 HashTree 是有序,但时间复杂度O(logn),所以只有通过组合 HashMap 与链表才能达到有序时间复杂度更优,但牺牲了空间复杂度

41100

《王道》数据结构笔记整理2022级_数据结构笔记整理

2.2.1静态分配: 2.2.2动态分配 2.2顺序表基本操作 1.插入操作 :平均时间复杂度O(n) 2.删除操作:平均时间复杂度O(n) 3.按位查找(获取L表第i个位置值):平均时间复杂度...=NULL){ //结点p做相应处理,eg打印 p = p->next; } 注意:双链表不可随机存取,按位查找按值查找操作都只能用遍历方式实现,时间复杂度O(n)...,从尾部找到头部时间复杂度O(1),即对表头表尾进行操作都只需要O(1)时间复杂度; ==优点:==从表任一节点出发均可找到表其他结点。...,执行相应运算,运算结果压回栈顶,回到步骤1; 注意: 先出栈是“右操作数” 3.前缀表达式 (波兰表达式) 运算符在两个操作数前面: ① + a b ② - +ab c ③ - +ab *cd...(队列)r; 时间效率:一共进行d趟分配收集,一趟分配需要O(n), 一趟收集需要O®, 时间复杂度 O[d(n+r)],与序列初始状态无关 稳定性:稳定!

2.5K00

数据结构之哈希表

通过这个简单计算我们就能得到字符所对应数组索引,进而得到字符所出现次数,看得出来这个操作时间复杂度是 $O(1)$。因此,访问哈希表时间复杂度也就是 $O(1)$。...总结成公式大概就是这样: code = c * B^3 + o * B^2 + d * B^1 + e * B^0 因此,哈希函数表示如下: hash(code) = (c * B^3 + o * B...如下所示: hash(code) = ((((c * B) + o) * B + d) * B + e) % M 但是这样计算对于整型来说还会有溢出问题,所以我们需要将取模计算放进去,最终得出哈希函数如下...当查找、删除一个元素时,我们同样通过哈希函数计算出对应槽,然后遍历链表查找或者删除。那查找或删除操作时间复杂度是多少呢?...随着不断地添加数据,哈希表数据越来越密集,哈希冲突概率就会越来越大,从而导致每个 TreeMap 里存储越来越多数据,会使得哈希表时间复杂度从 $O(1)$ 退化至 $O(logn)$,如果使用是链表的话会退化至

67630

编码5分钟,优化两小时?14 条 yyds 编码规范

;除此之外,任何Collection.isEmpty() 实现时间复杂度都是O(1) ,不需要多次循环遍历,但是某些通过Collection.size() 方法实现时间复杂度可能是O(n)。...collection is null."); } 四、初始化集合时尽量指定其大小 尽量在初始化时指定集合大小,能有效减少集合扩容次数,因为集合每次扩容时间复杂度很可能时O(n),耗费时间性能...(i); } 五、若需频繁调用Collection.contains 方法则使用Set 在Java 集合类库,Listcontains 方法普遍时间复杂度O(n),若代码需要频繁调用contains...方法查找数据则先将集合list 转换成HashSet 实现,将O(n) 时间复杂度将为O(1)。...)); // 结果["a", "|", "a", "b", "|", "a", "b", "c"] 正例: // String.split(String regex) 正例 // .

56330

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券