-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
73 lines (65 loc) · 2.73 KB
/
main.cpp
File metadata and controls
73 lines (65 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Source: https://leetcode.com/problems/transformed-array
// Title: Transformed Array
// Difficulty: Easy
// Author: Mu Yang <http://muyang.pro>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// You are given an integer array `nums` that represents a circular array. Your task is to create a new array `result` of the **same** size, following these rules:
// For each index `i` (where `0 <= i < nums.length`), perform the following **independent** actions:
//
// - If `nums[i] > 0`: Start at index `i` and move `nums[i]` steps to the **right** in the circular array. Set `result[i]` to the value of the index where you land.
// - If `nums[i] < 0`: Start at index `i` and move `abs(nums[i])` steps to the **left** in the circular array. Set `result[i]` to the value of the index where you land.
// - If `nums[i] == 0`: Set `result[i]` to `nums[i]`.
//
// Return the new array `result`.
//
// **Note:** Since `nums` is circular, moving past the last element wraps around to the beginning, and moving before the first element wraps back to the end.
//
// **Example 1:**
//
// Input: nums = [3,-2,1,1]
//
// Output: [1,1,1,3]
//
// Explanation:
//
// - For `nums[0]` that is equal to 3, If we move 3 steps to right, we reach `nums[3]`. So `result[0]` should be 1.
// - For `nums[1]` that is equal to -2, If we move 2 steps to left, we reach `nums[3]`. So `result[1]` should be 1.
// - For `nums[2]` that is equal to 1, If we move 1 step to right, we reach `nums[3]`. So `result[2]` should be 1.
// - For `nums[3]` that is equal to 1, If we move 1 step to right, we reach `nums[0]`. So `result[3]` should be 3.
//
// **Example 2:**
//
// Input: nums = [-1,4,-1]
//
// Output: [-1,-1,4]
//
// Explanation:
//
// - For `nums[0]` that is equal to -1, If we move 1 step to left, we reach `nums[2]`. So `result[0]` should be -1.
// - For `nums[1]` that is equal to 4, If we move 4 steps to right, we reach `nums[2]`. So `result[1]` should be -1.
// - For `nums[2]` that is equal to -1, If we move 1 step to left, we reach `nums[1]`. So `result[2]` should be 4.
//
// **Constraints:**
//
// - `1 <= nums.length <= 100`
// - `-100 <= nums[i] <= 100`
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <vector>
using namespace std;
class Solution {
private:
int mod(int val, int n) { return ((val % n) + n) % n; }
public:
vector<int> constructTransformedArray(vector<int>& nums) {
int n = nums.size();
// Init the result
auto result = vector<int>(n);
// Loop the numbers
for (int i = 0; i < n; ++i) {
auto num = nums[i];
result[i] = nums[mod(i + num, n)];
}
return result;
}
};