当前位置: 首页 > news >正文

汕头网站制作找哪家蓬莱做网站公司

汕头网站制作找哪家,蓬莱做网站公司,帝国cms小说网站模板下载地址,做外贸做什么网站好当然可以!下面是这道题(LeetCode 18: 四数之和)的思路总览模板答案,适用于笔试、面试或者写题解时的标准答题格式👇 🧩 LeetCode 18. 四数之和 —— 思路总览模板答案 ✅ 题目描述简要 给定一个整数数组 …

在这里插入图片描述

当然可以!下面是这道题(LeetCode 18: 四数之和)的思路总览模板答案,适用于笔试、面试或者写题解时的标准答题格式👇


🧩 LeetCode 18. 四数之和 —— 思路总览模板答案

✅ 题目描述简要

给定一个整数数组 nums 和一个目标值 target,找出所有不重复的四元组 [a, b, c, d],使得:

nums[a] + nums[b] + nums[c] + nums[d] == target

要求:

  • 四元组元素的下标不重复
  • 四元组值不能重复(顺序无关)

🔍 解题思路

1. 排序数组

首先将数组 nums 升序排序,便于后续使用双指针,并且方便跳过重复元素。

2. 枚举前两个数 + 双指针找后两个数
  • 固定前两个数 nums[i]nums[j]
  • 在剩余部分使用双指针 leftright,寻找符合条件的另外两个数
3. 跳过重复元素
  • 对于每一层循环(i, j)和每次指针移动(left, right),都要跳过相同的数值,确保不出现重复的四元组
4. 使用 long 防止整型溢出
  • nums[i] + nums[j] + nums[left] + nums[right] 可能超出 int 范围,因此建议用 long 存储临时和

🧠 算法复杂度

  • 时间复杂度:O(n³)
    三重循环(两层 + 双指针)枚举所有可能组合

  • 空间复杂度:O(1)
    只用了常数级额外空间(不算返回结果)


💡 关键技巧总结

  • 排序数组:便于双指针和去重操作
  • 双指针:利用有序数组快速找到两数之和
  • 去重处理:防止重复答案(i、j、left、right层层去重)
  • long 类型:规避溢出风险

java solution

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> result = new ArrayList<>();//首先进行排序Arrays.sort(nums);int n = nums.length;for(int i = 0; i < n - 3; i++) { //先确定第一个数if(i > 0 && nums[i] == nums[i - 1]) continue; //进行去重//然后确定第二个数for(int j = i + 1; j < n - 2; j++) {if(j > i + 1 && nums[j] == nums[j - 1]) continue; //去重//此时, 前两个数都确定了,然后开始初始化双指针int left = j + 1, right = n - 1;while(left < right) {//先计算四数之和long sum = (long) nums[i] + nums[j] + nums[left] + nums[right];if(sum == target) {result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));//继续去重while(left < right && nums[left] == nums[left + 1]) left++;while(left < right && nums[right] == nums[right - 1] ) right--;//此时left和right仍然需要移动一位,因为上面的去重只是移动到连续重复的最后一个字符left++;right--;} else if(sum < target){left++;} else {right--;}}}}return result;}
}

当然可以!我们来一步步详细剖析这段 Java 代码的 算法思想和实现细节。目标是解决 LeetCode 第 18 题 —— 四数之和(4Sum)问题:


🧠 题目核心思想

给定一个数组 nums 和一个目标值 target,我们需要找出所有 不重复的四元组 [a, b, c, d],使得:

nums[a] + nums[b] + nums[c] + nums[d] == target

算法核心步骤(排序 + 双指针)

我们用一种 类似“三数之和”(3Sum) 的方式来解决这个问题,只不过是套两层循环 + 双指针。


🧩 代码讲解

public List<List<Integer>> fourSum(int[] nums, int target) {

我们定义一个返回值为 List 的函数,返回所有不重复的四元组。


    List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums); // 排序,方便后面双指针处理和去重

对数组进行排序是关键,排序后我们就可以利用双指针进行查找,同时能方便地跳过重复值。


    int n = nums.length;for (int i = 0; i < n - 3; i++) {if (i > 0 && nums[i] == nums[i - 1]) continue; // 去重

第一层循环,选第一个数 nums[i]。去重防止同样的开头重复出现。


        for (int j = i + 1; j < n - 2; j++) {if (j > i + 1 && nums[j] == nums[j - 1]) continue; // 去重

第二层循环,选第二个数 nums[j],同样做去重。


            int left = j + 1, right = n - 1;

这时候,问题变成了:在 nums[j+1] ~ nums[n-1] 中找两个数,使得四个数的和等于 target。这正是双指针的用武之地。


            while (left < right) {long sum = (long) nums[i] + nums[j] + nums[left] + nums[right];

这里我们用了 long 来存储和,是为了避免大整数相加时溢出。


                if (sum == target) {result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));

如果找到满足条件的四元组,加入结果集。


                    while (left < right && nums[left] == nums[left + 1]) left++; // 去重while (left < right && nums[right] == nums[right - 1]) right--; // 去重left++;right--;

找到一个解后,我们继续往下找新的解,但要跳过相同的值(防止重复解)。


                } else if (sum < target) {left++; // 和太小,左边往右移动} else {right--; // 和太大,右边往左移动}

如果当前和小于目标值,我们就让左指针右移,反之则右指针左移。


最终返回结果

    return result;
}

📈 时间复杂度分析

  • 外层两层循环:O(n^2)
  • 内层双指针扫描:O(n)
  • 所以总时间复杂度是:O(n^3),比暴力穷举 O(n^4) 快了很多。

🧹 去重机制详解

  • 第1个数 i 和第2个数 j:如果跟前一个一样,就跳过
  • 第3和第4个数:用 while 跳过重复值(排序保证相同值相邻)

🛡️ 为何使用 long 来存和?

避免整型溢出!比如 Integer.MAX_VALUE + Integer.MAX_VALUE 就会出错,所以强转为 long 保险。

http://www.dtcms.com/a/459843.html

相关文章:

  • 建立网站的原因中小企业网站功能
  • 南县建设局网站市场调研报告最佳范文
  • 如何做教育网站帝舵手表官方网站
  • 电商网站建设标准网站做app开发工具
  • php网站模板 下载什么网站可以做会计题目
  • 建设银行江西分行官方网站黄骅市属于沧州吗
  • 企业网站改版计划书昆明专业网站制作公司
  • 展示网站源码下载全国网络推广
  • 香水网站开源模板网站制作企业有哪些公司
  • 装饰网站模版做英文的小说网站
  • 网站怎么做收录ui做套网站多少钱
  • 济南传承网站建设公司企业网站 建设策划书
  • 企业宣传网站案例多少钱才算有钱人
  • 网站建设考虑十大互联网广告公司
  • 做国际网站有补贴吗如何看网站点击量
  • 企业网站模板湖南岚鸿模板任务发布网站建设
  • 高端网站设计教程河南网站建设报价
  • 供需平台类网站建设西红柿怎么做网站
  • 网站正在建设中源码阿里域名注册查询
  • 国外做vj的网站遵义做网站推广
  • 付公司制作网站费怎么做凭证东莞手机app开发
  • 著名的淘宝客网站什么是竞价推广
  • 网站建设前期需要干嘛佛山网站建设外包公司
  • 云南网站设计流程北京商场打折
  • 网站开发应如何入账产品开发的流程
  • 甘德县公司网站建设做外贸网站平台有哪些内容
  • 建设网站要那些开江网站建设
  • 用PYTHON3 做网站手机广告设计软件
  • 网站iis配置福州做网站的
  • 论坛网站建设开源工具邵东网站