对于15.三数之和使用双指针解法:首先一层for循环nums[i]为确定值,然后循环内有left和right下标作为双指针,找到nums[i]+nums[left]+nums[right]==0
时间复杂度为O(n^2)
对于18.四数之和使用双指针解法:首先是两层for循环nums[i]+nums[k]为确定值,然后循环内有left和right下标作为双指针,找到nums[i]+nums[k]+nums[left]+nums[right]==target
时间复杂度为O(n^3)
那么一样的道理,五数之和、六数之和等等都是采用这样的解法
对于454.四数相加II,相对于n数之和简单很多,因为n数之和是要求在一个集合中找出n个数相加等于0或者target,同时n元组不能重复。
而454.四数相加II是四个独立的数组,只要找到nums1[i]+nums2[j]+nums3[k]+nums4[l]==0就可以,不硬考虑重复的四个元素相加等于0的情况。
双指针法将时间复杂度O(n^2) 的解法优化为O(n)的解法,经典例题如下:
27.移除元素
15.三数之和
18.四数之和
链表相关双指针题目
206.反转链表
19.删除链表的倒数第N个结点
142.环形链表II