代码随想录刷题学习日记

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

15.三数之和(双指针法)

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ,找出所有满足条件且不重复的三元组。

提供参数:整数数组nums

主要操作:

对数组排序

一个for循环遍历nums,控制变量a(nums[i])

判断是否整个数组不满足条件

对a去重:当前a与上一个a相比是否相等

在for循环内定义两个指针,left=i+1;right=nums.length-1,当right>left是总是判断:

nums[i]+nums[left]+nums[right]>0,right--;

nums[i]+nums[left]+nums[right]<0,left++;

nums[i]+nums[left]+nums[right]=0,[nums[i],nums[left],nums[right]]放入结果数组,并判断left与其后是否有相同的进行去重,right与其前是否有相同的进行去重,如果没有,则:left--,right--;

18.四数之和

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d =target ,找出所有满足条件且不重复的四元组。

提供参数:整数数组nums,整数target

主要思路:与三数之和相同使用双指针法,不过在三数之和中将a作为确定值使用双指针法,在四数之和中将a+b作为确定值使用双指针法,

主要操作:

定义一个结果数组

对数组进行排序

第一个for循环从头开始遍历nums(a=nums[i])

判断整个数组是否都不满足条件:

([-4,-3,-2,-1],target=-10,每个元素大于-10,但相加等于-10)

当nums[i]>target且nums[i]>=0时,整个数组不满足条件

对第一个数a(nums[i])进行去重:

nums[i]与nums[i-1]比较是否相等去重,与前一个比较进行去重支持第一个数与第二个数相等,与后一个数比较进行去重会导致遗漏a=b,且a+b+c+d=target的情况

第二个for循环从a后一个数(i+1)开始遍历nums(b=nums[j])

判断整个数组是否都不满足条件:

当nums[i]+nums[j]>target且nums[j]>=0时,整个数组不满足条件

(nums[i]+nums[j]>target,且后续元素数值都大于等于0时,整个数组任意四元组值大于0)

对第二个数b(nums[j])进行去重与a的去重一致

在第二个for循环内进行四元组的寻找:

定义left=j+1,right=nums.length-1,当right>left时,持续判断:

nums[i]+nums[j]+nums[left]+nums[right]>0,right--;

nums[i]+nums[j]+nums[left]+nums[right]<0,left++;

nums[i]+nums[j]+nums[left]+nums[right]=0,将[nums[i],nums[j],nums[left],nums[right]]保存到结果数组中,并判断left与其后是否有相同的进行去重,right与其前是否有相同的进行去重,如果没有,则:left--,right--;

你可能感兴趣的:(代码随想录学习日记,算法,哈希算法,学习)