Simplify Transactions



Simplify Transactions

Given n people who owe various amounts of money to each other, simplify the transactions they make between themselves such that there are no more than n transactions and everyone is fairly paid.

Example:

There are four people: sam, jim, bob, sarah

Format is of the form [(from, to, amount)]

Input:

  [("sam","jim",200),("sam","bob",110),("jim","bob",50),("jim","sarah",20),("bob","sarah",30),("sarah","sam",120)]  

This means sam owes jim 200, sam owes bob 110, jim owes bob 50, jim owes sarah 20, bob owes sarah 30, and sarah owes sam 120.

Sample Output:

  [("sarah","sam",70),("sam","jim",260),("jim","bob",130)]  

This means sarah pays sam 70, sam pays jim 260, and jim pays bob 130.

To see why this is correct consider jim. Originally he was going getting 200 and paying 50+20. So overall he was getting 200 - (50 + 20) = 130.

With the simplified transactions he is getting 260 and paying 130. So overall he is getting 260 - 130 = 130.

This same check can be applied to each person to see that this simplification is fair.


Read full article from Simplify Transactions


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts