您将获得2个int数组。
A=[1, 2, 1]
B=[2, 3, 3]
so fractions are: 1/2, 2/3, 1/3
A是分子,B是分母。 所以分数是:1 / 2、2 / 3、1 / 3
找到总和为1的所有货币对。
示例:这里我们有2/3 + 1/3 = 1,所以计数= 1
返回1
因为输入可能很大,所以以10 ^ 9 +7为模返回
我在O(n ^ 2)中进行了一次处理,然后计算2的加法并检查它是否为1并更新计数器。
在O(n)中可能吗?
任何语言idm示例:
function solution(integer array A, integer array B){
return integer_counter;
}
答案 0 :(得分:0)
这是一个使用字典的 C# 解决方案
public static int SumOfFraction(int[] numerator, int[] denominator) {
int count = 0;
Dictionary < int, List < int >> keyValuePairs = new Dictionary < int, List < int >> ();
for (int i = 0; i < denominator.Length; i++) {
if (keyValuePairs.ContainsKey(denominator[i])) {
keyValuePairs[denominator[i]].Add(numerator[i]);
} else {
keyValuePairs.Add(denominator[i], new List < int > {
numerator[i]
});
}
}
foreach(var keypair in keyValuePairs) {
if (keypair.Key == keypair.Value.Sum()) {
count++;
}
}
return count;
}
答案 1 :(得分:0)
Cpp 解决方案:
#include <cassert>
#include <cstdint>
#include <unordered_set>
#include <utility>
#include <vector>
#include <iostream>
using namespace std;
//From https://stackoverflow.com/questions/15160889/how-can-i-make-an-unordered-set-of-pairs-of-integers-in-c
struct IntPairHash {
size_t operator()(const pair<uint32_t, uint32_t> &p) const {
assert(sizeof(size_t)>=8); //Ensure that std::size_t, the type of the hash, is large enough
//Shift first integer over to make room for the second integer. The two are
//then packed side by side.
return (((uint64_t)p.first)<<32) | ((uint64_t)p.second);
}
};
size_t
countPairs(const vector<int>& v1, const vector<int>& v2) {
unordered_set< std::pair<int, int>, IntPairHash> searchSet;
size_t count = 0;
for (size_t i = 0; i < v1.size(); i++) {
int complement = v2[i] - v1[i];
if (searchSet.find({complement, v2[i]}) != searchSet.end()) {
count++;
}
searchSet.insert({v1[i], v2[i]});
}
return count;
}
int main() {
cout << countPairs({1,2,1}, {2,3,3});
}
问题的一些说明:
pair<T1,T2>
直接存储在 unordered_set
中,因为它没有哈希函数。所以我复制了一个我在 SO 中找到的哈希函数,然后我做了以下操作:
对于每对 v1
和 v2
,我计算了我应该找到哪个数字的总和为 1。如果我正在搜索的值已经在 searchSet
中,我可以在柜台上加一个。最后,我将 v1[i], v2[i]
值添加到 searchSet。
for
循环是 O(n)
,对 unordered_set
的每次插入/检查操作都是 O(1)
。