-
-
Notifications
You must be signed in to change notification settings - Fork 50.2k
rearranging fruits #13319
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rearranging fruits #13319
Changes from all commits
816f99b
55f03bb
d62c263
73c8049
e316c4f
d6dcaf7
b5633f1
c308b24
4849db3
a8bfe51
c9da86c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| # it's a leetcode question no. 2561 where You have two fruit baskets containing n fruits each. You are given two 0-indexed integer arrays basket1 and basket2 representing the cost of fruit in each basket. | ||
|
Check failure on line 1 in greedy_methods/rearranging_fruits.py
|
||
| # You want to make both baskets equal. To do so, you can use the following operation as many times as you want: | ||
|
Check failure on line 2 in greedy_methods/rearranging_fruits.py
|
||
|
|
||
| # Chose two indices i and j, and swap the ith fruit of basket1 with the jth fruit of basket2. | ||
|
Check failure on line 4 in greedy_methods/rearranging_fruits.py
|
||
| # The cost of the swap is min(basket1[i],basket2[j]). | ||
| # Two baskets are considered equal if sorting them according to the fruit cost makes them exactly the same baskets. | ||
|
Check failure on line 6 in greedy_methods/rearranging_fruits.py
|
||
|
|
||
| # Return the minimum cost to make both the baskets equal or -1 if impossible. | ||
|
|
||
| from typing import List | ||
|
Check failure on line 10 in greedy_methods/rearranging_fruits.py
|
||
| from collections import defaultdict | ||
|
Check failure on line 11 in greedy_methods/rearranging_fruits.py
|
||
|
|
||
|
|
||
| def min_cost(basket1: List[int], basket2: List[int]) -> int: | ||
|
Check failure on line 14 in greedy_methods/rearranging_fruits.py
|
||
| n = len(basket1) | ||
| freq = defaultdict(int) | ||
| mn = float("inf") | ||
|
|
||
| for i in range(n): | ||
| freq[basket1[i]] += 1 | ||
| freq[basket2[i]] -= 1 | ||
| mn = min(mn, basket1[i], basket2[i]) | ||
|
|
||
| to_swap = [] | ||
| for j, k in freq.items(): | ||
| if k % 2 != 0: | ||
| return -1 | ||
| to_swap += [j] * (abs(k) // 2) | ||
|
|
||
| to_swap.sort() | ||
| res = 0 | ||
| for i in range(len(to_swap) // 2): | ||
| res += min(to_swap[i], 2 * mn) | ||
|
|
||
| return res | ||
|
|
||
|
|
||
| if __name__ == "__main__": | ||
| # ---- Test Cases ---- | ||
| test_cases = [ | ||
| ([4, 2, 2, 2], [1, 4, 1, 2]), # Expected: 1 | ||
| ([1, 2, 3, 4], [2, 3, 4, 1]), # Expected: 0 | ||
| ([1, 1, 1, 1], [1, 1, 1, 1]), # Expected: 0 | ||
| ([1, 2, 2], [2, 1, 1]), # Expected: -1 | ||
| ([5, 3, 3, 2], [2, 5, 5, 3]), # Expected: -1 | ||
| ] | ||
|
|
||
| print("Running test cases...\n") | ||
| for b1, b2 in test_cases: | ||
| print(f"basket1 = {b1}, basket2 = {b2} → minCost = {min_cost(b1, b2)}") | ||
Uh oh!
There was an error while loading. Please reload this page.