簡體   English   中英

Java - 在排序數組中查找總和小於數字的三個數字的所有組合

[英]Java - find all combinations of three numbers in sorted array that have a sum smaller than a number

標題很拗口,所以我將進一步解釋。 這是我的計算機科學課程入門練習測試中的一個問題。 大多數問題我都能自己解決或在網上找到解決方案,但不是針對這個問題。

您將獲得一個唯一整數(正數和負數)的排序數組 ( int[] arr )。 您必須找出有多少三元組(數組中三個數字的組合)的總和小於給定數字( int num )。

方法簽名為: public static int countTriplets (int [] arr, int num)

問題是它必須以盡可能低的時間復雜度來完成。 如果我理解正確,使用嵌套 for 循環遍歷所有可能的組合會給我 O(n^3) 的時間復雜度。 但是,我想不出任何其他解決方案。

我還應該提到,該數組應該用作數組,而不使用其他 Java 類,如 ArrayList。

任何幫助表示贊賞。 它不必是代碼中的完整解決方案,甚至只是關於如何解決這個問題的一般想法。

對於這個3-sum 較小的問題,您可以嘗試兩種方法:由於數組已經排序,您可以直接使用任何一種算法。

  • 二分查找方法 O(n^2logn)
  • 兩指針方法:O(n^2)

我會嘗試兩點方法。 看看 Leetcode 的 2-sum 和 3-sum 問題,因為這是它的一個變體。 祝你好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM