欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(18.四數(shù)之和)

 更新時間:2021年07月13日 10:06:50   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(18.四數(shù)之和),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 18. 4Sum 四數(shù)之和

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note:

  • Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, abcd)
  • The solution set must not contain duplicate quadruplets.

    For example, given array S = {1 0 -1 0 -2 2}, and target = 0.

A solution set is:
(-1,  0, 0, 1)
(-2, -1, 1, 2)
(-2,  0, 0, 2)

LeetCode 中關(guān)于數(shù)字之和還有其他幾道,分別是 Two Sum ,3Sum ,3Sum Closest,雖然難度在遞增,但是整體的套路都是一樣的,在這里為了避免重復(fù)項,我們使用了 STL 中的 TreeSet,其特點是不能有重復(fù),如果新加入的數(shù)在 TreeSet 中原本就存在的話,插入操作就會失敗,這樣能很好的避免的重復(fù)項的存在。此題的 O(n^3) 解法的思路跟 3Sum 基本沒啥區(qū)別,就是多加了一層 for 循環(huán),其他的都一樣,代碼如下:

解法一:

class Solution {
public:
    vector<vector<int>> fourSum(vector<int> &nums, int target) {
        set<vector<int>> res;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < int(nums.size() - 3); ++i) {
            for (int j = i + 1; j < int(nums.size() - 2); ++j) {
                if (j > i + 1 && nums[j] == nums[j - 1]) continue;
                int left = j + 1, right = nums.size() - 1;
                while (left < right) {
                    int sum = nums[i] + nums[j] + nums[left] + nums[right];
                    if (sum == target) {
                        vector<int> out{nums[i], nums[j], nums[left], nums[right]};
                        res.insert(out);
                        ++left; --right;
                    } else if (sum < target) ++left;
                    else --right;
                }
            }
        }
        return vector<vector<int>>(res.begin(), res.end());
    }
};

但是畢竟用 TreeSet 來進行去重復(fù)的處理還是有些取巧,可能在 Java 中就不能這么做,那么還是來看一種比較正統(tǒng)的做法吧,手動進行去重復(fù)處理。主要可以進行的有三個地方,首先在兩個 for 循環(huán)下可以各放一個,因為一旦當前的數(shù)字跟上面處理過的數(shù)字相同了,那么找下來肯定還是重復(fù)的。之后就是當 sum 等于 target 的時候了,在將四個數(shù)字加入結(jié)果 res 之后,left 和 right 都需要去重復(fù)處理,分別像各自的方面遍歷即可,參見代碼如下:

解法二:

class Solution {
public:
    vector<vector<int>> fourSum(vector<int> &nums, int target) {
        vector<vector<int>> res;
        int n = nums.size();
        sort(nums.begin(), nums.end());
        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) {
                    int sum = nums[i] + nums[j] + nums[left] + nums[right];
                    if (sum == target) {
                        vector<int> out{nums[i], nums[j], nums[left], nums[right]};
                        res.push_back(out);
                        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 res;
    }
};

到此這篇關(guān)于C++實現(xiàn)LeetCode(18.四數(shù)之和)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)四數(shù)之和內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C 語言常用方法技巧

    C 語言常用方法技巧

    本文主要介紹了C語言常用方法技巧。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • C語言宏定義容易認不清的盲區(qū)梳理

    C語言宏定義容易認不清的盲區(qū)梳理

    宏定義是C提供的三種預(yù)處理(宏定義、文件包含、條件編譯)的其中一種,其主要目的是為程序員在編程時提供一定的方便,并能在一定程度上提高程序的運行效率
    2022-09-09
  • C語言超詳細講解循環(huán)與分支語句基礎(chǔ)

    C語言超詳細講解循環(huán)與分支語句基礎(chǔ)

    各位小伙伴們,今天給大家?guī)淼氖茄h(huán)與分支語句,本篇將會向大家介紹這些語句的格式和使用的基本方法,感興趣的朋友來看看吧
    2022-04-04
  • C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • C語言開發(fā)實現(xiàn)貪吃蛇游戲

    C語言開發(fā)實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C語言開發(fā)實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言實現(xiàn)英文文本詞頻統(tǒng)計

    C語言實現(xiàn)英文文本詞頻統(tǒng)計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)英文文本詞頻統(tǒng)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 一篇文章帶你掌握C++虛函數(shù)的來龍去脈

    一篇文章帶你掌握C++虛函數(shù)的來龍去脈

    虛函數(shù)主要通過V-Table虛函數(shù)表來實現(xiàn),該表主要包含一個類的虛函數(shù)的地址表,可解決繼承、覆蓋的問題,下面這篇文章主要給大家介紹了如何通過一篇文章帶你掌握C++虛函數(shù)的來龍去脈,需要的朋友可以參考下
    2022-10-10
  • C語言實現(xiàn)掃雷游戲源代碼

    C語言實現(xiàn)掃雷游戲源代碼

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷游戲源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 聊聊C語言中sizeof運算符的一個陷阱

    聊聊C語言中sizeof運算符的一個陷阱

    在C語言中,sizeof()是一個判斷數(shù)據(jù)類型或者表達式長度的運算符,下面這篇文章主要給大家介紹了關(guān)于C語言中sizeof運算符的一個陷阱的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • ros項目調(diào)試:vscode下配置開發(fā)ROS項目的詳細教程

    ros項目調(diào)試:vscode下配置開發(fā)ROS項目的詳細教程

    這篇文章主要介紹了ros項目調(diào)試:vscode下配置開發(fā)ROS項目,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論