2024-05-10 Daily Challenge
Today I have done leetcode's May LeetCoding Challenge with cpp
.
May LeetCoding Challenge 10
Description
K-th Smallest Prime Fraction
You are given a sorted integer array arr
containing 1
and prime numbers, where all the integers of arr
are unique. You are also given an integer k
.
For every i
and j
where 0 <= i < j < arr.length
, we consider the fraction arr[i] / arr[j]
.
Return the kth
smallest fraction considered. Return your answer as an array of integers of size 2
, where answer[0] == arr[i]
and answer[1] == arr[j]
.
Example 1:
Input: arr = [1,2,3,5], k = 3 Output: [2,5] Explanation: The fractions to be considered in sorted order are: 1/5, 1/3, 2/5, 1/2, 3/5, and 2/3. The third fraction is 2/5.
Example 2:
Input: arr = [1,7], k = 1 Output: [1,7]
Constraints:
2 <= arr.length <= 1000
1 <= arr[i] <= 3 * 104
arr[0] == 1
arr[i]
is a prime number fori > 0
.- All the numbers of
arr
are unique and sorted in strictly increasing order. 1 <= k <= arr.length * (arr.length - 1) / 2
Follow up: Can you solve the problem with better than
O(n2)
complexity?
Solution
struct s{
double val;
int up;
int dn;
bool operator<(const s& b){
return val<b.val;
}
}v[2000000];
class Solution {
public:
vector<int> kthSmallestPrimeFraction(vector<int>& A, int K) {
vector<int> ans;
int cnt = 0;
for(int i=1;i<A.size();++i){
for(int j=0;j<i;++j){
v[cnt].val = 1.0*A[j]/A[i];
v[cnt].up = A[j];
v[cnt].dn = A[i];
++cnt;
}
}
nth_element(v,v+K-1,v+cnt);
// for(int i=0;i<v.size();++i){
// cout<<v[i].up<<" "<<v[i].dn<<endl;
// }
ans.push_back(v[K-1].up);
ans.push_back(v[K-1].dn);
return ans;
}
};