Leetcode--Java--15,高并发你真的理解透彻了吗

2021/9/8 9:39:29

本文主要是介绍Leetcode--Java--15,高并发你真的理解透彻了吗,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

示例 2:

输入:nums = []

输出:[]



### []( )思路



1.  双指针。 双指针需要有序,先将数组排序,保证指向的值 i < j < k  

    ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=35df36e62bf54423af8e2de0ea050b9d.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NoZXJsb2NrX09iYW1h,size_16,color_FFFFFF,t_70)

2.  固定i,双指针枚举k,j ,如果j增大,k必然减小,因为 i + j + k = 0

3.  去重。若当前数和上一个数是一样的话,就跳过。 因为上一个已经把取nums\[i\]的情况枚举完了



优化后的方法:



1.  固定i,动态调整另外两个指针

2.  i指针要去重。同时在加入到将结果集后l和r指针也要去重,改变指针的位置指向下一个不同的地方



### []( )代码



class Solution {

public List<List<Integer>> threeSum(int[] nums) {

   List<List<Integer>> res = new ArrayList<>();

   //先排序

   Arrays.sort(nums);

   int len = nums.length;

   for (int i = 0; i < len; i ++ ) {

       //去重,如果和上一个i指向的数一样

       if (i > 0 && nums[i] == nums[i - 1]) continue;

       //j k两个指针不能相遇

       for (int j = i + 1, k = len - 1; j < k; j ++ ) {

           //去重,如果和上一个j指向的数相同

           if (j > i + 1 && nums[j] == nums[j - 1]) continue;

           //找到满足 >= 0的最小的 k

    //试探法。 如果下一个数满足,就用下一个数。使得退出while循环时k不会等于j

           while (j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) k --;

            if (nums[i] + nums[j] + nums[k] == 0) {

                // List<Integer> ans = new ArrayList<>();

                // ans.add(nums[i]);

                // ans.add(nums[j]);

                // ans.add(nums[k]);

    res.add(new ArrayList<Integer>(Arrays.asList(nums[k], nums[i], nums[j])));

                // res.add(ans);

            }

       }

   }

   return res;

}

}



优化后的方法



class Solution {

public List<List<Integer>> threeSum(int[] nums) {

  Arrays.sort(nums);

  int len = nums.length;

  List<List<Integer>> res = new ArrayList<>();

  for (int i = 0; i < len - 2; i ++ ) {

      if (nums[i] > 0) break; //如果i指的数大于0,则三个数一定大于0

      //去重

最后

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

由于篇幅原因,就不多做展示了
外链图片转存中…(img-wYkjdL0S-1631063993056)]

[外链图片转存中…(img-kZ3jFn2B-1631063993058)]

[外链图片转存中…(img-PLLAnaBA-1631063993059)]

由于篇幅原因,就不多做展示了



这篇关于Leetcode--Java--15,高并发你真的理解透彻了吗的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程