給定乙個長度為n的陣列a和乙個正整數k,從陣列中選擇四個數,要求四個數的乘積小於等於k,求方案總數。
陣列中可能出現多個值相同的數。
每次選擇四個數時,同乙個數不能被選擇兩次,而值相同的兩個不同的數可以同時被選。
1 \leq n \leq 10^31≤n≤10
3
1 \leq a[i] \leq 10^6 (1 \leq i \leq n)1≤a[i]≤10
6 (1≤i≤n)
1 \leq k \leq 10^61≤k≤10
6
給定 n = 5, a = [1,1,1,2,2], k = 3, 返回 2 。
解釋:假設方案[i,j,p,q]表示選擇的四個數分別為:a[i],a[j],a[p],a[q]。0<= i,j,p,q < n。
則滿足條件的方案有:
[0,1,2,3]
[0,1,2,4]
給定 n = 5 , a = [2,4,9,4,3], k = 300, 返回 4 。
解釋:假設方案[i,j,p,q]表示選擇的四個數分別為:a[i],a[j],a[p],a[q]。0<= i,j,p,q < n。
則滿足條件的方案有:
[0,1,3,4]
[0,1,2,4]
[0,2,3,4]
[0,1,2,3]
最暴力的方法是遍歷全部的i j p q,複雜度是o(n4),不可取。
如果是兩數乘積,這個題目就變得非常簡單,對陣列排序之後,用前後兩個指標遍歷。
這個題目根據這個思路就可以變成先固定2個指標i,j,然後變成兩數乘積。再加上一些控制條件,變得相對簡單一些。
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
40
class solutionwhile (q-p>=1)
else
q--;}}
}return res;}};
-------------end of file
thanks for reading-------------
lintcode 四數乘積問題
給定乙個長度為n的陣列a和乙個正整數k,從陣列中選擇四個數,要求四個數的乘積小於等於k,求方案總數。陣列中可能出現多個值相同的數。每次選擇四個數時,同乙個數不能被選擇兩次,而值相同的兩個不同的數可以同時被選。1 leq n leq 10 31 n 10 3 1 leq a i leq 10 6 1 ...
質數乘積 LintCode
給定乙個無重複的質數陣列arr,每個質數最多使用一次,求所有無重複的乘積並從小到大排序。注意事項 2 arr 9 2 arr i 23樣例 給出 arr 2,3 返回 6 解釋 2 3 6。給出 arr 2,3,5 返回 6,10,15,30 解釋 2 3 6,2 5 10,3 5 15,2 3 5...
領扣LintCode問題答案 58 四數之和
領扣lintcode問題答案 58.四數之和 給乙個包含n個數的整數陣列s,在s中找到所有使得和為給定整數target的四元組 a,b,c,d 四元組 a,b,c,d 中,需要滿足a b c d 答案中不可以包含重複的四元組。樣例 1 輸入 2,7,11,15 3 輸出 樣例 2 輸入 1,0,1,...