做网站一般像素我想做个门户网站怎么做
2026/5/21 15:11:25 网站建设 项目流程
做网站一般像素,我想做个门户网站怎么做,广州车陂网站建设公司,正规的国内网站建设公司15. 三数之和 - 力扣#xff08;LeetCode#xff09; 解法一#xff1a;排序后暴力枚举然后利用set去重 答案中不可以包含重复的三元组#xff0c;输出的顺序和三元组的顺序并不重要。根据这两点要求我们需要对数组进行排序#xff0c;排序后三层for循环嵌套遍历数组可以…15. 三数之和 - 力扣LeetCode解法一排序后暴力枚举然后利用set去重答案中不可以包含重复的三元组输出的顺序和三元组的顺序并不重要。根据这两点要求我们需要对数组进行排序排序后三层for循环嵌套遍历数组可以找出所有满足i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0的三元组而在这些三元组中重复的三元组因为数组有序而完全一样包括顺序然后把全部的三元组一股脑扔给set容器set会帮我们完成去重最后输出结果。时间复杂度O(n^3) (该解法只解释思路不做具体演示我们主要学习下面这种解法)解法二排序双指针算法思路1.先对数组排序令其变为有序固定左侧i,定义t-num[i],定义leftright指针lr分别是其所指向的值在[left,right]区间中遍历使lrt2.若lrt,right–,若lrt,left,若lrt存储三元组target,left,ight–。l,r循环直至leftright3.然后i开始下一轮循环直至in(一个小优化当num[i]0时就可以结束循环了之后不可能有符合条件的三元组)处理细节问题1.去重当找到符合条件的三元组时leftright要跳过重复元素s当使用完一次双指针算法后i也要跳过重复元素2.不漏找到一种结果后不要停缩小区间继续寻找3.避免越界特殊情况每次跳过重复元素时都要判断是否越界代码:classSolution{public:vectorvectorintthreeSum(vectorintnums){sort(nums.begin(),nums.end());intnnums.size();vectorvectorinta;for(inti0;in;){if(nums[i]0)break;// 小优化intlefti1,rightn-1,t-nums[i];while(leftright){if(nums[left]nums[right]t)right--;elseif(nums[left]nums[right]t)left;else{//找到一种结果后不要停缩小区间继续寻找a.push_back({nums[i],nums[left],nums[right--]});//leftright去重,每次跳过重复元素时都要判断是否越界while(leftrightnums[left]nums[left-1])left;while(leftrightnums[right]nums[right1])right--;}}i;//i去重while(innums[i]nums[i-1])i;}returna;}};18. 四数之和 - 力扣LeetCode四数之和与三数之和的结题思路一致相当于三数之和外面再套一个for循环classSolution{public:vectorvectorintfourSum(vectorintnums,inttarget){sort(nums.begin(),nums.end());intnnums.size();vectorvectorintret;for(inti0;in;){//固定afor(intji1;jn;){//固定bintleftj1,rightn-1;//防止数据溢出longlongaim(longlong)target-nums[i]-nums[j];while(leftright){intsumnums[left]nums[right];if(sumaim)left;elseif(sumaim)right--;else{ret.push_back({nums[i],nums[j],nums[left],nums[right--]});//去重1while(leftrightnums[left]nums[left-1])left;while(leftrightnums[right]nums[right1])right--;}}//去重2j;while(jnnums[j]nums[j-1])j;}//去重3i;while(innums[i]nums[i-1])i;}returnret;}};

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询