Leetcode--923. 三数之和的多种可能
发布日期:2021-04-30 21:05:12 浏览次数:129 分类:精选文章

本文共 2450 字,大约阅读时间需要 8 分钟。

????????????????? i < j < k ? A[i] + A[j] + A[k] == target ?????????????????????????? 10^9 + 7 ????

????

????????????????????????????

  • ?????????????????????????????
  • ???????????? i, j, k ?????????????????
  • ????????????? i???? j ? k ??????????????????????????
  • ???????????????????????????????????
  • ????????????????????????????
  • ???????????? O(n^2) ??????????????????? 300 ? 3000 ??????

    ????

    import java.util.Arrays;public class Solution {    public int threeSumMulti(int[] nums, int target) {        Arrays.sort(nums);        int n = nums.length;        int mod = 1000000007;        int sum = 0;        int i, j, k;        for (i = 0; i < n - 2; i++) {            int start = i + 1;            int end = n - 1;            while (start < end) {                int current = nums[i] + nums[start] + nums[end];                if (current > target) {                    end--;                } else if (current < target) {                    start++;                } else {                    // current == target, calculate the number of valid triplets                    if (nums[start] == nums[end]) {                        // same values, choose any two from start to end                        int count = end - start + 1;                        sum = (sum + (count * (count - 1)) / 2) % mod;                        start++;                    } else {                        // different values, count the number of possible (j, k)                        int left = start;                        int right = end;                        int cnt = 0;                        while (left < right && nums[left] == nums[start]) {                            left++;                        }                        while (right > left && nums[right] == nums[end]) {                            right--;                        }                        int a = left - start;                        int b = right - end;                        cnt = a * b;                        sum = (sum + cnt) % mod;                        start++;                        end--;                    }                }            }        }        return sum % mod;    }}

    ????

  • ??????? Arrays.sort(nums) ?????????????
  • ??????mod ???????sum ??????????????
  • ????????? i?? 0 ???????
  • ??????? i ????? j ? k ????? start ? end?
  • ?????????????????????? start ? end ????
  • ?????????????????????? sum?
  • ???????????????????????????? sum?
  • ???????????????????????
  • ????????????????????????????????????

    上一篇:Leetcode--142. 环形链表Ⅱ
    下一篇:Leetcode--72.编辑距离(java)

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2026年06月01日 21时16分56秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章