Skip to content

Commit

Permalink
New Problem Solution - "Shuffle an Array"
Browse files Browse the repository at this point in the history
  • Loading branch information
haoel committed Aug 24, 2016
1 parent d076c2c commit d666cbf
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ LeetCode
|387|[First Unique Character in a String](https://leetcode.com/problems/first-unique-character-in-a-string/) | [C++](./algorithms/cpp/firstUniqueCharacterInAString/FirstUniqueCharacterInAString.cpp)|Easy|
|386|[Lexicographical Numbers](https://leetcode.com/problems/lexicographical-numbers/) | [C++](./algorithms/cpp/lexicographicalNumbers/LexicographicalNumbers.cpp)|Medium|
|385|[Mini Parser](https://leetcode.com/problems/mini-parser/) | [C++](./algorithms/cpp/miniParser/MiniParser.cpp)|Medium|
|384|[Shuffle an Array](https://leetcode.com/problems/shuffle-an-array/) | [C++](./algorithms/cpp/shuffleAnArray/ShuffleAnArray.cpp)|Medium|
|377|[Combination Sum IV](https://leetcode.com/problems/combination-sum-iv/) | [C++](./algorithms/cpp/combinationSumIV/combinationSumIV.cpp)|Medium|
|376|[Wiggle Subsequence](https://leetcode.com/problems/wiggle-subsequence/) | [C++](./algorithms/cpp/wiggleSubsequence/wiggleSubsequence.cpp)|Medium|
|350|[Intersection of Two Arrays II](https://leetcode.com/problems/intersection-of-two-arrays-ii/) | [C++](./algorithms/cpp/intersectionOfTwoArraysII/intersectionOfTwoArraysII.cpp)|Easy|
Expand Down
59 changes: 59 additions & 0 deletions algorithms/cpp/shuffleAnArray/ShuffleAnArray.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Source : https://leetcode.com/problems/shuffle-an-array/
// Author : Hao Chen
// Date : 2016-08-24

/***************************************************************************************
*
* Shuffle a set of numbers without duplicates.
*
* Example:
*
* // Init an array with set 1, 2, and 3.
* int[] nums = {1,2,3};
* Solution solution = new Solution(nums);
*
* // Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must
* equally likely to be returned.
* solution.shuffle();
*
* // Resets the array back to its original configuration [1,2,3].
* solution.reset();
*
* // Returns the random shuffling of array [1,2,3].
* solution.shuffle();
***************************************************************************************/

class Solution {
public:
Solution(vector<int> nums) : _nums(nums), _solution(nums) {
srand(time(NULL));
}

/** Resets the array to its original configuration and return it. */
vector<int> reset() {
return _solution = _nums;
}

/** Returns a random shuffling of the array. */
vector<int> shuffle() {
//Fisher Yates
//https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

int i = _solution.size();

while ( --i > 0 ) {
int j = rand() % (i+1);
swap(_solution[i], _solution[j]);
}
return _solution;
}
private:
vector<int> _nums, _solution;
};

/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(nums);
* vector<int> param_1 = obj.reset();
* vector<int> param_2 = obj.shuffle();
*/

0 comments on commit d666cbf

Please sign in to comment.