From 989e20d15ee85cbbc372c79801d17a4a44733bef Mon Sep 17 00:00:00 2001 From: Jessica Kwok Date: Mon, 22 Mar 2021 09:00:58 -0700 Subject: [PATCH 1/4] Add shuffle array challenge --- DIRECTORY.md | 1 + data_structures/arrays/shuffle_array.rb | 36 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 data_structures/arrays/shuffle_array.rb diff --git a/DIRECTORY.md b/DIRECTORY.md index 5983249..4eb3612 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -13,6 +13,7 @@ * [Fizz Buzz](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/fizz_buzz.rb) * [Get Products Of All Other Elements](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/get_products_of_all_other_elements.rb) * [Remove Elements](https://github.com/TheAlgorithms/Ruby/blob/master/data_structures/arrays/remove_elements.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..93efa84 --- /dev/null +++ b/data_structures/arrays/shuffle_array.rb @@ -0,0 +1,36 @@ +# 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[]} +def shuffle(nums, n) +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 From 16fd8c756ff5508c611bf42173a9fc998c3f5e8e Mon Sep 17 00:00:00 2001 From: Jessica Kwok Date: Tue, 23 Mar 2021 08:42:36 -0700 Subject: [PATCH 2/4] Add solution using a new array --- data_structures/arrays/shuffle_array.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/data_structures/arrays/shuffle_array.rb b/data_structures/arrays/shuffle_array.rb index 93efa84..b4c6431 100644 --- a/data_structures/arrays/shuffle_array.rb +++ b/data_structures/arrays/shuffle_array.rb @@ -1,27 +1,39 @@ # 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: # +# 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)) From a8f816f984ad98f59942aae06eff775816bf83f8 Mon Sep 17 00:00:00 2001 From: Jessica Kwok Date: Wed, 24 Mar 2021 08:12:31 -0700 Subject: [PATCH 3/4] Add solution using Ruby methods --- data_structures/arrays/shuffle_array.rb | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/data_structures/arrays/shuffle_array.rb b/data_structures/arrays/shuffle_array.rb index b4c6431..2f1b13f 100644 --- a/data_structures/arrays/shuffle_array.rb +++ b/data_structures/arrays/shuffle_array.rb @@ -34,6 +34,34 @@ def shuffle(nums, n) 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)) From ad685ac4ee922161ba193a13050e38f3f050825d Mon Sep 17 00:00:00 2001 From: Jessica Kwok Date: Mon, 29 Mar 2021 10:22:09 -0700 Subject: [PATCH 4/4] Add two pointers approach --- data_structures/arrays/shuffle_array.rb | 57 +++++++++++++++++++------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/data_structures/arrays/shuffle_array.rb b/data_structures/arrays/shuffle_array.rb index 2f1b13f..22ec07a 100644 --- a/data_structures/arrays/shuffle_array.rb +++ b/data_structures/arrays/shuffle_array.rb @@ -34,18 +34,18 @@ def shuffle(nums, n) 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] +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() @@ -62,6 +62,39 @@ def shuffle(nums, n) 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))