aboutsummaryrefslogtreecommitdiff
path: root/other/shuffle_the_array.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'other/shuffle_the_array.cpp')
-rw-r--r--other/shuffle_the_array.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/other/shuffle_the_array.cpp b/other/shuffle_the_array.cpp
new file mode 100644
index 0000000..f7dddea
--- /dev/null
+++ b/other/shuffle_the_array.cpp
@@ -0,0 +1,39 @@
+// 1470. Shuffle the Array
+#include "leetcode.h"
+
+/*
+ * given 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]
+ */
+
+class Solution {
+public:
+ vector<int> shuffle(vector<int> &nums, int n) {
+ int len = nums.size();
+ for (int i = n; i < len; i++)
+ nums[i] = (nums[i] << 10) | nums[i - n];
+ int idx = 0;
+ for (int i = n; i < len; i++, idx += 2) {
+ nums[idx] = nums[i] & 1023;
+ nums[idx + 1] = nums[i] >> 10;
+ }
+ return nums;
+ }
+};
+
+int main() {
+ Solution obj;
+ vector<int> nums1 = {2, 5, 1, 3, 4, 7};
+ vector<int> nums2 = {1, 2, 3, 4, 4, 3, 2, 1};
+ vector<int> nums3 = {1, 1, 2, 2};
+ for (auto i : obj.shuffle(nums1, 3))
+ cout << i << ' '; // expect: 2,3,5,4,1,7
+ cout << endl;
+ for (auto i : obj.shuffle(nums2, 4))
+ cout << i << ' '; // expect: 1,4,2,3,3,2,4,1
+ cout << endl;
+ for (auto i : obj.shuffle(nums3, 2))
+ cout << i << ' '; // expect: 1,2,1,2
+ cout << endl;
+}