[LeetCode] 4Sum II 四數之和之二

?

Given four lists A, B, C, D of integer values, compute how many tuples?(i, j, k, l)?there are such that?A[i] + B[j] + C[k] + D[l]?is zero.

To make problem a bit easier, all A, B, C, D have same length of N where 0 ≤ N ≤ 500. All integers are in the range of -228?to 228?- 1 and the result is guaranteed to be at most 231?- 1.

Example:

Input:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]Output:
2Explanation:
The two tuples are:
1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

?

這道題是之前那道4Sum的延伸,讓我們在四個數組中各取一個數字,使其和為0。那么墜傻的方法就是遍歷所有的情況,時間復雜度為O(n4)。但是我們想想既然Two Sum那道都能將時間復雜度縮小一倍,那么這道題我們使用哈希表是否也能將時間復雜度降到O(n2)呢?答案是肯定的,我們如果把A和B的兩兩之和都求出來,在哈希表中建立兩數之和跟其出現次數之間的映射,那么我們再遍歷C和D中任意兩個數之和,我們只要看哈希表存不存在這兩數之和的相反數就行了,參見代碼如下:

?

解法一:

class Solution {
public:int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {int res = 0;unordered_map<int, int> m;for (int i = 0; i < A.size(); ++i) {for (int j = 0; j < B.size(); ++j) {++m[A[i] + B[j]];}}for (int i = 0; i < C.size(); ++i) {for (int j = 0; j < D.size(); ++j) {int target = -1 * (C[i] + D[j]);res += m[target];}}return res;}
};

?

這種方法用了兩個哈希表分別記錄AB和CB的兩兩之和出現次數,然后遍歷其中一個哈希表,并在另一個哈希表中找和的相反數出現的次數,參見代碼如下:

?

解法二:

class Solution {
public:int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {int res = 0, n = A.size();unordered_map<int, int> m1, m2;for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {++m1[A[i] + B[j]];++m2[C[i] + D[j]];}}for (auto a : m1) res += a.second * m2[-a.first];return res;}
};

?

類似題目:

4Sum

?

參考資料:

https://discuss.leetcode.com/topic/67593/clean-java-solution-o-n-2

https://discuss.leetcode.com/topic/67729/concise-8-line-c-solution-with-hashmap-simple-and-clean/2

?

LeetCode All in One 題目講解匯總(持續更新中...)

轉載于:https://www.cnblogs.com/grandyang/p/6073317.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270476.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php的正則表達式函數,php中常用的正則表達式函數

php中常用的正則表達式函數* preg_match()* preg_match_all()* preg_replace()* preg_filter()* preg_grep()* preg_split()* preg_quote()接下來對比講解&#xff1a;講解中 $pattern 通常表示正則表達式$subject 通常表示目標處理數據定義一個方法 方便查看數據類型&#xff…

硬件知識:固態硬盤4K對齊知識介紹

目錄 1、什么是4K對齊呢&#xff1f; 2、怎么查看硬盤是否4K對齊呢&#xff1f; 3、怎么4K對齊呢&#xff1f; 現在大家基本都有一個固態硬盤&#xff0c;而在固態硬盤分區中4K對齊是非常重要的。 1、什么是4K對齊呢&#xff1f; “4K對齊”就是符合“4K扇區”定義格式化過的硬…

【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的區別

SpringCloudApplication注解 注解SpringCloudApplication包括&#xff1a;SpringBootApplication、EnableDiscoveryClient、EnableCircuitBreaker&#xff0c;分別是SpringBoot注解、注冊服務中心Eureka注解、斷路器注解。對于SpringCloud來說&#xff0c;這是每一微服務必須應…

網絡知識:路由器常見故障分析及處理方法

目錄 1.路由器的部分功能無法實現 2.網絡頻繁掉線 3.無法瀏覽網頁 4.某些應用無法使用 5&#xff0e;網絡帶寬達不到合同帶寬或相差甚遠 6.局域網內存在多個路由器&#xff0c;因人為原因出現二級路由 對當前的大多數網絡來說&#xff0c;無論是實現網絡互連還是訪問Internet&a…

matlab找不到函數系統函數,求助,Matlab找不到ztrans函數

只把這個函數給你吧,你自己保存下:function F ztrans(varargin)%ZTRANS Z-transform.% F ZTRANS(f) is the Z-transform of the scalar sym f with default% independent variable n. The default return is a function of z:% f f(n) > F F(z). The Z-transfor…

硬件技巧:如何隱設置的你的電腦U盤不可見

有時候電腦里面有重要內容&#xff0c;在不聯網的情況下&#xff0c;還需要禁用U盤&#xff0c;下面介紹禁用U盤的方法&#xff0c;原創文章&#xff0c;轉載注明出處即可。 第一步&#xff0c;首先在電腦上點擊開始按鈕&#xff0c;或者直接按下快捷鍵組合"WinR"&am…

XidianOJ 1035 數獨 1053 正數負數 1042 另一個簡單的游戲

三道水題。。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n; int main(){while (scanf("%d",&n) ! EOF){if (n > 0){printf("yes\n");}else if (n < 0)…

Django 基本命令

1. 新建一個 django projectdjango-admin.py startproject project-name一個 project 為一個項目&#xff0c;project-name 項目名稱&#xff0c;改成你自己的&#xff0c;要符合Python 的變量命名規則&#xff08;以下劃線或字母開頭&#xff09;2. 新建 apppython manage.py …

前端知識:如何創建自己的Iconfont圖標庫

在日常的開發過程中&#xff0c;前端頁面經常會引用一些圖標&#xff0c;iconfont圖標庫是前端開發者非常友好的在線字體圖標庫。大家可以根據平常所涉及的項目&#xff0c;收藏自己需要的圖標庫&#xff0c;方便在后續的項目中使用&#xff0c;今天小編給大家介紹如何通過icon…

mysql 二次 聚合,MySql-聚合查詢

聚合查詢Chloe 可以像寫 sql 一樣實現聚合查詢。IQuery q context.Query();q.Select(a > Sql.Count()).First();/** SELECT COUNT(1) AS C FROM Users AS Users LIMIT 0,1*//* 支持多個聚合函數 */q.Select(a > new{Count Sql.Count(),LongCount Sql.LongCount(),Sum …

硬件:固態硬盤SSD的基礎知識及安裝注意事項

固態硬盤就是用固態電子存儲芯片陣列而制成的硬盤&#xff0c;相對于機械硬盤&#xff0c;固態硬盤的讀寫速度更快&#xff0c;但是固態硬盤的缺點是壽命不如機械硬盤。 固態硬盤有寫入壽命&#xff0c;平均起來約為3000次P/E&#xff0c;1P/E為硬盤存儲上限&#xff0c;相當于…

C# Redis實戰(二)

二、Redis服務 在C# Redis實戰(一)中我將所有文件拷貝到了D盤redis文件夾下&#xff0c;其中redis-server.exe即為其服務端程序&#xff0c;雙擊即開始運行&#xff0c;如圖可以將此服務設置為windows系統服務&#xff0c;下載Redis服務安裝軟件&#xff0c;安裝即可。安裝完成…

matlab仿真超聲波測距,超聲波測距儀制作-Arduino中文社區 - Powered by Discuz!

本帖最后由 xiebb5688 于 2017-12-4 09:06 編輯雖然學的是機械&#xff0c;可也接觸過C語言&#xff0c;MATLAB等程序&#xff0c;每次編程的時候&#xff0c;能夠把BUG一個個解決掉&#xff0c;會帶來不小的成就感。于是感覺到自己骨子還是挺喜歡代碼的。于是也不知何時了解了…

Mac版本Navicat下載

提供navicat安裝包 鏈接&#xff1a;https://pan.baidu.com/s/1mQddUOuaxovVkhNOT9vUJw 密碼&#xff1a;tted

電腦技巧:鍵盤上的這幾個鍵,不常用,但有必要了解一下

目錄 鍵盤上三個特殊的鍵 Print Screen&#xff08;或 Prt Scn&#xff09; Scroll Lock&#xff08;或 Scr Lk&#xff09; Pause/Break ??????? 鍵盤上三個特殊的鍵 通過前幾期的文章&#xff0c;我們已經討論了幾乎所有可能要用到的鍵。但為了真正徹底地了解鍵盤&…

ip訪問php $_files空,PHP中表單沒有問題但$_FILES為空怎么辦?

PHP中表單沒有問題&#xff0c;但“$_FILES”為空的解決方法&#xff1a;首先在form中加代碼為“enctype"multipart/form-data”&#xff1b;然后開啟“file_uploads”并設置“file_uploadson”即可。PHP中表單沒有問題但是$_FILES為空的解決辦法在文件上傳中$_FILES接收不…

一張圖看透微信公眾號、企業號、小程序

對于微信小程序&#xff0c;推薦了解關鍵詞&#xff1a;“progress web app” 我覺得微信小程序跟原生app之間也沒有什么好爭議的&#xff0c;就如微信和手機qq一樣&#xff0c;有了微信&#xff0c;手機QQ也沒有死掉&#xff0c;微信小程序適合小型應用&#xff0c;或者說能用…

lamba List 轉 Map

Java 8 以前的寫法&#xff1a; Map<Long, User> userMap new HashMap<Long, User>(); for (User user : users) {userMap.put(user.getId(), user); } Java 8 寫法&#xff1a; Map<Long, User> userMap users.stream().collect(Collectors.toMap(User:…