Solve InterviewCake's top-scores
Using a counting sort to sort a list of values in linear time.
This commit is contained in:
		
							parent
							
								
									e4cdb5daed
								
							
						
					
					
						commit
						d2aa66a5b1
					
				
					 2 changed files with 48 additions and 1 deletions
				
			
		|  | @ -8,7 +8,7 @@ | ||||||
| ** DONE Inflight Entertainment | ** DONE Inflight Entertainment | ||||||
| ** DONE Permutation Palindrome | ** DONE Permutation Palindrome | ||||||
| ** DONE Word Cloud Data | ** DONE Word Cloud Data | ||||||
| ** TODO Top Scores | ** DONE Top Scores | ||||||
| * Greedy Algorithms | * Greedy Algorithms | ||||||
| ** TODO Apple Stocks | ** TODO Apple Stocks | ||||||
| ** TODO Highest Product of 3 | ** TODO Highest Product of 3 | ||||||
|  |  | ||||||
							
								
								
									
										47
									
								
								scratch/deepmind/part_two/top-scores.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								scratch/deepmind/part_two/top-scores.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | ||||||
|  | import unittest | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def sort_scores(xs, highest_possible_score): | ||||||
|  |     result = [] | ||||||
|  |     buckets = [0] * highest_possible_score | ||||||
|  | 
 | ||||||
|  |     for x in xs: | ||||||
|  |         buckets[x - 1] += 1 | ||||||
|  | 
 | ||||||
|  |     for i in range(highest_possible_score - 1, -1, -1): | ||||||
|  |         if buckets[i] > 0: | ||||||
|  |             for _ in range(buckets[i]): | ||||||
|  |                 result.append(i + 1) | ||||||
|  | 
 | ||||||
|  |     return result | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Tests | ||||||
|  | class Test(unittest.TestCase): | ||||||
|  |     def test_no_scores(self): | ||||||
|  |         actual = sort_scores([], 100) | ||||||
|  |         expected = [] | ||||||
|  |         self.assertEqual(actual, expected) | ||||||
|  | 
 | ||||||
|  |     def test_one_score(self): | ||||||
|  |         actual = sort_scores([55], 100) | ||||||
|  |         expected = [55] | ||||||
|  |         self.assertEqual(actual, expected) | ||||||
|  | 
 | ||||||
|  |     def test_two_scores(self): | ||||||
|  |         actual = sort_scores([30, 60], 100) | ||||||
|  |         expected = [60, 30] | ||||||
|  |         self.assertEqual(actual, expected) | ||||||
|  | 
 | ||||||
|  |     def test_many_scores(self): | ||||||
|  |         actual = sort_scores([37, 89, 41, 65, 91, 53], 100) | ||||||
|  |         expected = [91, 89, 65, 53, 41, 37] | ||||||
|  |         self.assertEqual(actual, expected) | ||||||
|  | 
 | ||||||
|  |     def test_repeated_scores(self): | ||||||
|  |         actual = sort_scores([20, 10, 30, 30, 10, 20], 100) | ||||||
|  |         expected = [30, 30, 20, 20, 10, 10] | ||||||
|  |         self.assertEqual(actual, expected) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | unittest.main(verbosity=2) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue