leetcode

来源:互联网 发布:网络彩票赌博怎么举报 编辑:程序博客网 时间:2024/06/03 20:20

1.twoSum

import java.util.HashMap;import java.util.Map;/*用一个map存储,有空间复杂度,时间复杂度o(n)* */public class twoSum {    public static void main(String args[]){        int[] data = {2, 7, 11, 15};        int[] result = twoSumdemo(data,9);        System.out.println(result[0]+","+result[1]);    }    public static int[] twoSumdemo(int[] nums, int target) {        Map tempMap = new HashMap<>();        for(int i=0;i

如果说 不要求返回下标,要求输出所有情况,可以把value变成次数,然后判断如果不存在继续走,如果存在value 次数加1后继续走,输出的时候 根据次数决定输出多少遍

3sum,3个数相加为0

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]]

算法:
先排序,小到大
一次for循环,i从前往后走,设置j=i+1 为i的下一位,k=length-1 为最后一位, j,k两个指针,如果nums[i]+nums[j]+nums[k]==0 j往后走,k往前走,则输入到list中,否则 如果>0 前面的j 往后移一位,如果<0,后面的k往前移一位,
去除重复数据:在for循环里面 判断,如果if(i==0||nums[i]>nums[i-1]){执行,如果i喝前一个一样跳过,找到合围0的数时,判断j,k和下一个如果一样,跳过

import java.util.ArrayList;        import java.util.Arrays;        import java.util.Collection;        import java.util.List;public class threesum {    /*    3sum,3个数相加为0        算法:        先排序,小到大        一次for循环,i从前往后走,设置j=i+1 为i的下一位,k=length-1 为最后一位, j,k两个指针,如果nums[i]+nums[j]+nums[k]==0 j往后走,k往前走,则输入到list中,否则 如果>0 前面的j 往后移一位,如果<0,后面的k往前移一位,        去除重复数据,即重复数据只用一次:        在for循环里面 判断,如果if(i==0 || nums[i] > nums[i-1])        {执行,如果i和前一个一样跳过,找到合围0的数时,判断j,k和下一个如果一样,跳过    */    public static List> threeSum(int[] nums) {        List> result = new ArrayList>();        if(nums == null || nums.length<3)            return result;        Arrays.sort(nums);        for(int i=0; i nums[i-1]){                int j=i+1;                int k=nums.length-1;                while(j l = new ArrayList();                        l.add(nums[i]);                        l.add(nums[j]);                        l.add(nums[k]);                        result.add(l);                        j++;                        k--;                        //handle duplicate here                        while(j

fourSum

算法: 和3数相加一样,第一层 for循环i,(如果 i!= 0 && num[i] == num[i-1]]和之前相等跳过)第二层for循环 j (i+1)(如果和之前相等跳过),定义j 和k指针,

注意去重


import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class fourSum {    public static List> fourSum(int[] nums, int target) {        List> result = new ArrayList>();        if(nums==null|| nums.length<4)            return result;        Arrays.sort(nums);        for(int i=0; itarget){                        l--;                    }else{                        List t = new ArrayList();                        t.add(nums[i]);                        t.add(nums[j]);                        t.add(nums[k]);                        t.add(nums[l]);                        result.add(t);                        k++;                        l--;                        while(k