【双指针】Leetcode 四数之和

题目解析

18. 四数之和

在这里插入图片描述
这道题的思路和三数之和的思路相同,都是固定一个数,然后在剩下的区间中寻找和为目标值的元组,其次最重要的是要进行去重


算法讲解

1. 完成排序

在这里插入图片描述
2. 固定一个数,求剩下区间中三元组的和等于 target - nums[i]
在这里插入图片描述


代码编写

class Solution {
public:
  
vector<vector<int>> threeSum(vector<int>& nums, long long temp)
{
    int n = nums.size();
    vector<vector<int>> ret;
    // 确定一个数字 寻找其他区间的两数之和
    for (int i = 0; i < n; i++)
    {
        // 对i去重
        if (i != 0 && nums[i] == nums[i - 1])
            continue;
        int left = i + 1;
        int right = n - 1;
        long long target = temp - nums[i]; // 寻找两数之和的target
        while (left < right)
        {
            if (nums[left] + nums[right] == target)
            {
                ret.push_back({ nums[left], nums[right], nums[i] });
                left++;
                right--;
                // 对 双指针 去重
                while (left < right && nums[left - 1] == nums[right])
                {
                    left++;
                }
                while (right > left && nums[right + 1] == nums[right])
                {
                    right--;
                }
            }
            else if (nums[left] + nums[right] > target)
            {
                right--;
            }
            else
                left++;
        }
    }
    return ret;
}

vector<vector<int>> fourSum(vector<int>& nums, int target) {
    // 排序
    sort(nums.begin(), nums.end());
    vector<vector<int>> ret;
    int n = nums.size();
    for (int i = 0; i < n; ) {
        vector<vector<int>> temp_ret;
        // 确定一个数 求出剩下的三元组  //需要将剩下的数组传递过去
        long long temp = target - nums[i];
        vector<int> temp_nums(nums.begin() + i + 1, nums.end());
        // 寻找数组中三元组中和等于temp的
        temp_ret = threeSum(temp_nums, temp);
        //完成四元组
        for (auto& v : temp_ret)
        {
            v.push_back(nums[i]);
            ret.push_back(v);
        }
        //去重
        i++;
        while (i < n && nums[i] == nums[i - 1])
        {
            i++;
        }
    }
    return ret;
}
};

相关推荐

  1. 指针 Leetcode 15 三之和

    2024-03-28 17:58:01       12 阅读
  2. Golang 三之和+ 之和 leetcode15、18 指针

    2024-03-28 17:58:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 17:58:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 17:58:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 17:58:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 17:58:01       18 阅读

热门阅读

  1. vue组件间通信详解

    2024-03-28 17:58:01       17 阅读
  2. 语言模型transformers调用部分 (To be continue...

    2024-03-28 17:58:01       17 阅读
  3. C语言:指针进阶

    2024-03-28 17:58:01       24 阅读
  4. Python入门级题目及答案

    2024-03-28 17:58:01       17 阅读
  5. 利用python脚本,根据词条爬取百度图片(爬虫)

    2024-03-28 17:58:01       16 阅读
  6. linux内核网络“每日读书”

    2024-03-28 17:58:01       17 阅读
  7. 【OpenGL实践06】如何读入模型文件obj数据

    2024-03-28 17:58:01       18 阅读
  8. OpenAI奥特曼豪赌1.42亿破解长生不老

    2024-03-28 17:58:01       22 阅读
  9. lua 判断字符串是否包含指定字符

    2024-03-28 17:58:01       18 阅读