日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leet Code OJ 15. 3Sum[Difficulty: Medium]

發(fā)布時間:2024/2/28 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leet Code OJ 15. 3Sum[Difficulty: Medium] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4},

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

翻譯:
給定一個數(shù)組S,它包含n個整數(shù),它是否存在3個元素a,b,c,滿足a+b+c=0?找出所有滿足條件的元素數(shù)組。
提示:a,b,c三個元素必須是升序排列(也就是滿足a ≤ b ≤ c),最終的結(jié)果不能包含重復的元素數(shù)組。例如給定S為{-1 0 1 2 -1 -4},返回結(jié)果是(-1, 0, 1)和(-1, -1, 2)。

分析:
最容易想到的方法就是3重循環(huán)遍歷所有可能的元素,進行判斷是否等于0。下面的方案作了一些改進:
1. 對數(shù)組進行排序,跳過肯定會大于0的結(jié)果
2. 借助map避免第三層遍歷
3. 由于做了排序,所以可以較為容易的跳過重復的結(jié)果

代碼(Java版):

public class Solution {public List <List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<>();//nums先進行排序Arrays.sort(nums);Map<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int num = nums[i];if (map.get(num) == null) {List<Integer> subscripts = new ArrayList<>();subscripts.add(i);map.put(num, subscripts);} else {map.get(num).add(i);}}for (int i = 0; i <= nums.length - 3; i++) {if (nums[i] > 0) {break;}if (i > 0 && nums[i] == nums[i - 1]) {continue;}for (int j = i + 1; j <= nums.length - 2; j++) {if (j > i + 1 && nums[j] == nums[j - 1]) {continue;}int finalNum = -nums[i] - nums[j];if (finalNum < nums[j]) {break;}List<Integer> subscripts = map.get(finalNum);if (subscripts == null) {continue;}for (Integer subscript : subscripts) {if (subscript != j && subscript != i) {List<Integer> list = new ArrayList<>();list.add(nums[i]);list.add(nums[j]);list.add(nums[subscript]);res.add(list);break;}}}}return res;} }

總結(jié)

以上是生活随笔為你收集整理的Leet Code OJ 15. 3Sum[Difficulty: Medium]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。