Leetcode--923. 三数之和的多种可能
????????????????????????????? ???????????? i, j, k ????????????????? ????????????? i???? j ? k ?????????????????????????? ??????????????????????????????????? ???????????????????????????? ??????? ?????? ????????? i?? 0 ??????? ??????? i ????? j ? k ????? ?????????????????????? ?????????????????????? ???????????????????????????? ???????????????????????
发布日期:2021-04-30 21:05:12
浏览次数:129
分类:精选文章
本文共 2450 字,大约阅读时间需要 8 分钟。
????????????????? i < j < k ? A[i] + A[j] + A[k] == target ?????????????????????????? 10^9 + 7 ????
????
????????????????????????????
???????????? 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 ??????????????start ? end?start ? end ????sum?sum?????????????????????????????????????
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2026年06月01日 21时16分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!