本文介绍: / nums[k] + nums[i] + nums[left] + nums[right] > target溢出。// nums[k] + nums[i] + nums[left] + nums[right] < target溢出。// 对nums[left]和nums[right]去重。// 这里使用break统一通过最后return返回。// 找到答案时,双指针同时收缩。// 对nums[i]去重。// 对nums[k]去重。

vector<vector<int>> fourSum(vector<int>& nums, int target)

{

        vector<vector<int>> result;

        sort(nums.begin(), nums.end());

        for (int k = 0; k < nums.size(); k++) {

            // 剪枝处理

            if (nums[k] &gt; target &amp;&amp; nums[k] &gt;= 0)        {

             break; // 这里使用break统一通过最后return返回

            }

            // 对nums[k]去重

            if (k &gt; 0 &amp;&amp; nums[k] == nums[k – 1]) {

                continue;

            }

            for (int i = k + 1; i < nums.size(); i++) {

                // 2级剪枝处理

                if (nums[k] + nums[i] > target &amp;&amp; nums[k] + nums[i] >= 0) {

                    break;

                }

 

                // 对nums[i]去重

                if (i > k + 1

                    &amp;&amp; nums[i] == nums[i – 1])

               {

                    continue;

                }

                int left = i + 1;

                int right = nums.size() – 1;

                while (right > left) {

                    // nums[k] + nums[i] + nums[left] + nums[right] > target溢出

                    if ((long) nums[k] + nums[i] + nums[left] + nums[right] > target) {

                        right–;

                    // nums[k] + nums[i] + nums[left] + nums[right] < target溢出

                    } else if ((long) nums[k] + nums[i] + nums[left] + nums[right] < target) {

                        left++;

                    } else {

                        result.push_back(vector<int>{nums[k], nums[i], nums[left], nums[right]});

                        // 对nums[left]和nums[right]去重

                        while (right > left &amp;&amp; nums[right] == nums[right – 1]) right–;

                        while (right > left &amp;&amp; nums[left] == nums[left + 1]) left++;

 

                        // 找到答案时,双指针同时收缩

                        right–;

                        left++;

                    }

                }

 

            }

        }

        return result;

}

 

 

 

 

原文地址:https://blog.csdn.net/weixin_43803780/article/details/134793144

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48274.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注