国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Leetcode] Two Sum, 3Sum,4Sum,4SumII,3Sum Closet

EddieChan / 3353人閱讀

摘要:解題思路題目要求兩個數和等于,返回其題目說明不會有重復情況,所以我們一旦發現符合情況的,就可以直接結束循環并返回。特殊情況就是正好等于,那肯定是最接近的情況,直接返回即可。

Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

1.解題思路

題目要求兩個數和等于target,返回其index.題目說明不會有重復情況,所以我們一旦發現符合情況的,就可以直接結束循環并返回。
利用HashMap,邊遍歷存儲,邊尋找。當給定一個數n,只要看target-n是否在map中即可,如果存在,則取出其value - 即該數的下標。

2.代碼

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res=new int[2];
        if(nums.length==0) return res;
        HashMap hm=new HashMap();
        for(int i=0;i

3Sum
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: 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]
]

1.解題思路

本題要求三個數的和為0,其實就是固定一個數n之后,找兩個數和為0-n,所以就轉化為求兩個數的和,那我們很容易想到使用二分法。
注意點:本題需要排除重復值,
1)固定的數下標為i,則要從i+1開始尋找后兩個數;
2)如果數組中包含重復的數,則為了保證結果不出現重復,我們每次遇到重復的數需要跳過。

2.代碼

public class Solution {
    List> res =new ArrayList>();
    public List> threeSum(int[] nums) {
      
       Arrays.sort(nums);
      
       for(int i=0;i0&&nums[i]==nums[i-1]) continue; //避免重復
           twoSum(0-nums[i],nums,i+1,nums.length-1);
       }
       return res;
    }
    private void twoSum(int target,int[] nums, int start,int end){
        
        int i=start,j=end;
        while(i subres=new ArrayList();
            int sum=nums[i]+nums[j];
            if(sum==target){
                subres.add(0-target);
                subres.add(nums[i]);
                subres.add(nums[j]);
                res.add(subres);
                
               do {
                    i++;
                }while(i < end && nums[i] == nums[i-1]);
                do {
                    j--;
                } while(j >= 0 && nums[j] == nums[j+1]);
            }
            else if(sum

4Sum
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: 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]
]

1.解題思路

4Sum,就是在3Sum基礎上再嵌套一層,注意點也是要避免重復。

2.代碼

public class Solution {
    ArrayList> res = new ArrayList>();
    public List> fourSum(int[] nums, int target) {
        Arrays.sort(nums);
        for(int i=0;i0&&nums[i]==nums[i-1]) continue;
              res.addAll(threesum(target-nums[i],nums,i+1));
        }
        return res;
    }
    private List> threesum(int target,int[] nums,int start){
        ArrayList> res = new ArrayList>();
        int first=start-1;
        for(int i=start;istart&&nums[i]==nums[i-1]) continue;
            res.addAll(twosum(target-nums[i],nums,i+1,first));
        }
        return res;
    }
    private List> twosum(int target,int[] nums,int start,int first){
        List> res =new ArrayList>();
        int second=start-1;
        int i=start;
        int j=nums.length-1;
        while(i subres =new ArrayList();
            int sum=nums[i]+nums[j];
            if(sum==target){
                subres.add(nums[first]);
                subres.add(nums[second]);
                subres.add(nums[i]);
                subres.add(nums[j]);
                res.add(subres);
                i++;
                while(i=0&&nums[j]==nums[j+1]){
                    j--;
                }
            }
            else if(sum>target) j--;
            else i++;
            
        }
        return res;
    }
}

3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

1.解題思路

與3Sum相似,只不過本次是要尋找最接近target的3個數之和,我們需要維護minDiff和closetSum兩個變量。
但是本題題目說明不許考慮重復。 特殊情況就是sum正好等于target,那肯定是最接近的情況,直接返回即可。

2.代碼

public class Solution {
    public int threeSumClosest(int[] nums, int target) {
        if(nums.length==0) return 0;
        int minDiff=Integer.MAX_VALUE;
        int closet=0;
        Arrays.sort(nums);
        for(int i=0;itarget){
                    right--;
                }
                else return sum;
            }
        }
        return closet;
    }
}

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:
2

Explanation:
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

1.解題思路

本題從1個數組擴展到了4個數組,求的是有多少組4數之和等于target的,我們把問題分為兩個數一組,假設當前兩個數A[i]+B[j],那我們其實就是要在C和D中求是否存在和為0-A[i]-B[j],如果存在則返回存在的個數。想到用HashMap,存儲.

2.代碼

public class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        if(A.length==0||B.length==0||C.length==0||D.length==0) return 0;
        Map map=new HashMap();
        int count=0;
        for(int i=0;i           
               
                                           
                       
                 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76392.html

相關文章

  • [Leetcode] 3Sum 4Sum 3Sum Closet 多數和

    摘要:為了避免得到重復結果,我們不僅要跳過重復元素,而且要保證找的范圍要是在我們最先選定的那個數之后的。而計算則同樣是先選一個數,然后再剩下的數中計算。 2Sum 在分析多數和之前,請先看Two Sum的詳解 3Sum 請參閱:https://yanjia.me/zh/2019/01/... 雙指針法 復雜度 時間 O(N^2) 空間 O(1) 思路 3Sum其實可以轉化成一個2Sum的題,...

    trigkit4 評論0 收藏0
  • 【LC總結】K Sum (Two Sum I II/3Sum/4Sum/3Sum Closest)

    摘要:找符合條件的總數。雙指針區間考慮邊界,長度,為空,等。之后的范圍用雙指針和表示。若三個指針的數字之和為,加入結果數組。不要求,所以不用判斷了。同理,頭部兩個指針向后推移,后面建立左右指針夾逼,找到四指針和為目標值的元素。 Two Sum Problem Given an array of integers, find two numbers such that they add up ...

    awesome23 評論0 收藏0
  • leetcode 部分解答索引(持續更新~)

    摘要:前言從開始寫相關的博客到現在也蠻多篇了。而且當時也沒有按順序寫現在翻起來覺得蠻亂的??赡艽蠹铱粗卜浅2环奖恪K栽谶@里做個索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開始寫leetcode相關的博客到現在也蠻多篇了。而且當時也沒有按順序寫~現在翻起來覺得蠻亂的??赡艽蠹铱粗卜浅2环奖?。所以在這里做個索引嘻嘻。 順序整理 1~50 1...

    leo108 評論0 收藏0
  • [LeetCode] 4Sum & 4Sum II

    摘要:和方法一樣,多一個數,故多一層循環。完全一致,不再贅述, 4Sum Problem 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 ...

    sydMobile 評論0 收藏0
  • leetcode 18 4Sum

    摘要:題目詳情輸入一個長度為的整數數組和一個目標整數,我們需要找出是否存在個元素,使得的和等于。如果有,輸出這樣的非重復的元素序列。在求元素的時候可以通過左右指針減少查找時間。 題目詳情 Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target...

    Vixb 評論0 收藏0

發表評論

0條評論

EddieChan

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<