{ "data": { "question": { "questionId": "3613", "questionFrontendId": "3387", "boundTopicId": null, "title": "Maximize Amount After Two Days of Conversions", "titleSlug": "maximize-amount-after-two-days-of-conversions", "content": "
You are given a string initialCurrency
, and you start with 1.0
of initialCurrency
.
You are also given four arrays with currency pairs (strings) and rates (real numbers):
\n\npairs1[i] = [startCurrencyi, targetCurrencyi]
denotes that you can convert from startCurrencyi
to targetCurrencyi
at a rate of rates1[i]
on day 1.pairs2[i] = [startCurrencyi, targetCurrencyi]
denotes that you can convert from startCurrencyi
to targetCurrencyi
at a rate of rates2[i]
on day 2.targetCurrency
can be converted back to its corresponding startCurrency
at a rate of 1 / rate
.You can perform any number of conversions, including zero, using rates1
on day 1, followed by any number of additional conversions, including zero, using rates2
on day 2.
Return the maximum amount of initialCurrency
you can have after performing any number of conversions on both days in order.
Note: Conversion rates are valid, and there will be no contradictions in the rates for either day. The rates for the days are independent of each other.
\n\n\n
Example 1:
\n\nInput: initialCurrency = "EUR", pairs1 = [["EUR","USD"],["USD","JPY"]], rates1 = [2.0,3.0], pairs2 = [["JPY","USD"],["USD","CHF"],["CHF","EUR"]], rates2 = [4.0,5.0,6.0]
\n\nOutput: 720.00000
\n\nExplanation:
\n\nTo get the maximum amount of EUR, starting with 1.0 EUR:
\n\nExample 2:
\n\nInput: initialCurrency = "NGN", pairs1 = [["NGN","EUR"]], rates1 = [9.0], pairs2 = [["NGN","EUR"]], rates2 = [6.0]
\n\nOutput: 1.50000
\n\nExplanation:
\n\nConverting NGN to EUR on day 1 and EUR to NGN using the inverse rate on day 2 gives the maximum amount.
\nExample 3:
\n\nInput: initialCurrency = "USD", pairs1 = [["USD","EUR"]], rates1 = [1.0], pairs2 = [["EUR","JPY"]], rates2 = [10.0]
\n\nOutput: 1.00000
\n\nExplanation:
\n\nIn this example, there is no need to make any conversions on either day.
\n\n
Constraints:
\n\n1 <= initialCurrency.length <= 3
initialCurrency
consists only of uppercase English letters.1 <= n == pairs1.length <= 10
1 <= m == pairs2.length <= 10
pairs1[i] == [startCurrencyi, targetCurrencyi]
pairs2[i] == [startCurrencyi, targetCurrencyi]
1 <= startCurrencyi.length, targetCurrencyi.length <= 3
startCurrencyi
and targetCurrencyi
consist only of uppercase English letters.rates1.length == n
rates2.length == m
1.0 <= rates1[i], rates2[i] <= 10.0
5 * 1010
.initialCurrency
to this currency on day 1, and from that currency back to initialCurrency
on day 2.",
"Use a DFS/BFS to calculate the direct conversion rate between any two currencies."
],
"solution": null,
"status": null,
"sampleTestCase": "\"EUR\"\n[[\"EUR\",\"USD\"],[\"USD\",\"JPY\"]]\n[2.0,3.0]\n[[\"JPY\",\"USD\"],[\"USD\",\"CHF\"],[\"CHF\",\"EUR\"]]\n[4.0,5.0,6.0]",
"metaData": "{\n \"name\": \"maxAmount\",\n \"params\": [\n {\n \"name\": \"initialCurrency\",\n \"type\": \"string\"\n },\n {\n \"type\": \"listCompiled with clang 19
using the latest C++ 23 standard, and libstdc++
provided by GCC 14.
Your code is compiled with level two optimization (-O2
). AddressSanitizer is also enabled to help detect out-of-bounds and use-after-free bugs.
Most standard library headers are already included automatically for your convenience.
\"], \"java\": [\"Java\", \"OpenJDK 21
. Using compile arguments: --enable-preview --release 21
Most standard library headers are already included automatically for your convenience.
\\r\\nIncludes Pair
class from https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html.
Python 2.7.18
.
Most libraries are already imported automatically for your convenience, such as array, bisect, collections. If you need more libraries, you can import it yourself.
\\r\\n\\r\\nFor Map/TreeMap data structure, you may use sortedcontainers library.
\\r\\n\\r\\nNote that Python 2.7 is not maintained anymore. For the latest Python, please choose Python3 instead.
\"], \"c\": [\"C\", \"Compiled with gcc 14
using the gnu11 standard.
Your code is compiled with level one optimization (-O2
). AddressSanitizer is also enabled to help detect out-of-bounds and use-after-free bugs.
Most standard library headers are already included automatically for your convenience.
\\r\\n\\r\\nFor hash table operations, you may use uthash. \\\"uthash.h\\\" is included by default. Below are some examples:
\\r\\n\\r\\n1. Adding an item to a hash.\\r\\n
\\r\\nstruct hash_entry {\\r\\n int id; /* we'll use this field as the key */\\r\\n char name[10];\\r\\n UT_hash_handle hh; /* makes this structure hashable */\\r\\n};\\r\\n\\r\\nstruct hash_entry *users = NULL;\\r\\n\\r\\nvoid add_user(struct hash_entry *s) {\\r\\n HASH_ADD_INT(users, id, s);\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n
2. Looking up an item in a hash:\\r\\n
\\r\\nstruct hash_entry *find_user(int user_id) {\\r\\n struct hash_entry *s;\\r\\n HASH_FIND_INT(users, &user_id, s);\\r\\n return s;\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n
3. Deleting an item in a hash:\\r\\n
\\r\\nvoid delete_user(struct hash_entry *user) {\\r\\n HASH_DEL(users, user); \\r\\n}\\r\\n\\r\\n\"], \"csharp\": [\"C#\", \"
C# 12 with .NET 8 runtime
\"], \"javascript\": [\"JavaScript\", \"Node.js 20.10.0
.
Your code is run with --harmony
flag, enabling new ES6 features.
lodash.js library is included by default.
\\r\\n\\r\\nFor Priority Queue / Queue data structures, you may use 5.4.0 version of datastructures-js/priority-queue and 4.2.3 version of datastructures-js/queue and 1.0.4 version of datastructures-js/deque.
\"], \"ruby\": [\"Ruby\", \"Ruby 3.2
Some common data structure implementations are provided in the Algorithms module: https://www.rubydoc.info/github/kanwei/algorithms/Algorithms
\"], \"swift\": [\"Swift\", \"Swift 5.10
.
You may use swift-algorithms 1.2.0 and swift-collections 1.1.4.
\"], \"golang\": [\"Go\", \"Go 1.23
Support https://pkg.go.dev/github.com/emirpasic/gods@v1.18.1 and https://pkg.go.dev/github.com/emirpasic/gods/v2@v2.0.0-alpha library.
\"], \"python3\": [\"Python3\", \"Python 3.11
.
Most libraries are already imported automatically for your convenience, such as array, bisect, collections. If you need more libraries, you can import it yourself.
\\r\\n\\r\\nFor Map/TreeMap data structure, you may use sortedcontainers library.
\"], \"scala\": [\"Scala\", \"Scala 3.3.1
.
Kotlin 1.9.0
.
We are using an experimental compiler provided by JetBrains.
\"], \"rust\": [\"Rust\", \"Rust 1.79.0
. Your code will be compiled with opt-level
2.
Supports rand v0.8 and regex\\u00a0v1 from crates.io
\"], \"php\": [\"PHP\", \"PHP 8.2
.
With bcmath module
\"], \"typescript\": [\"Typescript\", \"TypeScript 5.1.6, Node.js 20.10.0
.
Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2022
Your code is run with --harmony
flag, enabling new ES2022 features.
lodash.js library is included by default.
\\r\\n\\r\\nFor Priority Queue / Queue data structures, you may use 5.4.0 version of datastructures-js/priority-queue and 4.2.3 version of datastructures-js/queue and 1.0.4 version of datastructures-js/deque.
\"], \"racket\": [\"Racket\", \"Racket CS v8.15
\\r\\n\\r\\nUsing #lang racket
Required data/gvector data/queue data/order data/heap
automatically for your convenience
Dart 3.2. You may use package collection
\\r\\n\\r\\nYour code will be run directly without compiling
\"]}", "libraryUrl": null, "adminUrl": null, "challengeQuestion": null, "__typename": "QuestionNode" } } }