lintcode 四數乘積問題

2021-09-20 10:05:44 字數 1225 閱讀 5533

給定乙個長度為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,然後變成兩數乘積。再加上一些控制條件,變得相對簡單一些。

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

40

class solution 

while (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,...