diff --git a/DIRECTORY.md b/DIRECTORY.md index 059eebf..488e66b 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -16,6 +16,7 @@ * [Remove Elements](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/remove_elements.rb) * [Richest Customer Wealth](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/richest_customer_wealth.rb) * [Single Number](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/single_number.rb) + * [Shuffle Array](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/shuffle_array.rb) * [Sort Squares Of An Array](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/sort_squares_of_an_array.rb) * [Two Sum](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/two_sum.rb) * [Two Sum Ii](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/two_sum_ii.rb) diff --git a/data_structures/arrays/shuffle_array.rb b/data_structures/arrays/shuffle_array.rb new file mode 100644 index 0000000..22ec07a --- /dev/null +++ b/data_structures/arrays/shuffle_array.rb @@ -0,0 +1,109 @@ +# Challenge name: Shuffle the array +# +# Given the array nums consisting of 2n elements +# in the form [x1,x2,...,xn,y1,y2,...,yn]. +# Return the array in the form [x1,y1,x2,y2,...,xn,yn]. +# +# Example 1: +# Input: nums = [2,5,1,3,4,7], n = 3 +# Output: [2,3,5,4,1,7] +# Explanation: Since x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 then the answer is [2,3,5,4,1,7]. +# +# Example 2: +# Input: nums = [1,2,3,4,4,3,2,1], n = 4 +# Output: [1,4,2,3,3,2,4,1] +# +# Example 3: +# Input: nums = [1,1,2,2], n = 2 +# Output: [1,2,1,2] +# +# @param {Integer[]} nums +# @param {Integer} n +# @return {Integer[]} + +# +# Approach 1: New Array +# +# Time Complexity: O(N) +# +def shuffle(nums, n) + result = [] + (0..n-1).count do |i| + result.push(nums[i], nums[i+n]) + end + result +end + +nums = [2, 5, 1, 3, 4, 7] +n = 3 +print(shuffle(nums, n)) +# Output: [2,3,5,4,1,7] +nums = [1, 2, 3, 4, 4, 3, 2, 1] +n = 4 +print(shuffle(nums, n)) +# Output: [1,4,2,3,3,2,4,1] +nums = [1, 1, 2, 2] +n = 2 +print(shuffle(nums, n)) +# Output: [1,2,1,2] + +# +# Approach 2: Use Ruby methods .insert() and .delete_at() +# +# Time Complexity: O(N) +# + +def shuffle(nums, n) + current_index = 1 + (0..n-1).each do |i| + nums.insert(current_index, nums.delete_at(i + n)) + current_index += 2 + end + nums +end + +nums = [2, 5, 1, 3, 4, 7] +n = 3 +print(shuffle(nums, n)) +# Output: [2,3,5,4,1,7] +nums = [1, 2, 3, 4, 4, 3, 2, 1] +n = 4 +print(shuffle(nums, n)) +# Output: [1,4,2,3,3,2,4,1] +nums = [1, 1, 2, 2] +n = 2 +print(shuffle(nums, n)) +# Output: [1,2,1,2] + +# +# Approach 3: Two Pointers +# +# Time Complexity: O(N) +# + +def shuffle(nums, n) + result = [] + p1 = 0 + p2 = n + + while p1 < n + result.push(nums[p1], nums[p2]) + p1 +=1 + p2 +=1 + end + + result +end + +nums = [2, 5, 1, 3, 4, 7] +n = 3 +print(shuffle(nums, n)) +# Output: [2,3,5,4,1,7] +nums = [1, 2, 3, 4, 4, 3, 2, 1] +n = 4 +print(shuffle(nums, n)) +# Output: [1,4,2,3,3,2,4,1] +nums = [1, 1, 2, 2] +n = 2 +print(shuffle(nums, n)) +# Output: [1,2,1,2] \ No newline at end of file