Leetcode - K Sum
List<List<Integer>> kSum_Trim(int[] a, int target, int k) { List<List<Integer>> result = new ArrayList<>(); if (a == null || a.length < k || k < 2) return result; Arrays.sort(a); kSum_Trim(a, target, k, 0, result, new ArrayList<>()); return result; } void kSum_Trim(int[] a, int target, int k, int start, List<List<Integer>> result, List<Integer> path) { int max = a[a.length - 1]; if (a[start] * k > target || max * k < target) return; if (k == 2) { // 2 Sum int left = start; int right = a.length - 1; while (left < right) { if (a[left] + a[right] < target) left++; else if (a[left] + a[right] > target) right--; else { result.add(new ArrayList<>(path)); result.get(result.size() - 1).addAll(Arrays.asList(a[left], a[right])); left++; right--; while (left < right && a[left] == a[left - 1]) left++; while (left < right && a[right] == a[right + 1]) right--; } } } else { // k Sum for (int i = start; i < a.length - k + 1; i++) { if (i > start && a[i] == a[i - 1]) continue; if (a[i] + max * (k - 1) < target) continue; if (a[i] * k > target) break; if (a[i] * k == target) { if (a[i + k - 1] == a[i]) { result.add(new ArrayList<>(path)); List<Integer> temp = new ArrayList<>(); for (int x = 0; x < k; x++) temp.add(a[i]); result.get(result.size() - 1).addAll(temp); // Add result immediately. } break; } path.add(a[i]); kSum_Trim(a, target - a[i], k - 1, i + 1, result, path); path.remove(path.size() - 1); // Backtracking } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?