Skip to content

Commit 52dfdb8

Browse files
authored
feat: add solutions to lc problem: No.3653 (#4833)
1 parent 525045b commit 52dfdb8

File tree

8 files changed

+271
-8
lines changed

8 files changed

+271
-8
lines changed

solution/3600-3699/3653.XOR After Range Multiplication Queries I/README.md

Lines changed: 95 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,32 +90,123 @@ tags:
9090

9191
<!-- solution:start -->
9292

93-
### 方法一
93+
### 方法一:模拟
94+
95+
我们可以直接模拟题目中的操作,遍历每个查询并更新数组 $\textit{nums}$ 中的对应元素。最后计算数组中所有元素的按位异或结果并返回。
96+
97+
时间复杂度 $O(q \times \frac{n}{k})$,其中 $n$ 是数组 $\textit{nums}$ 的长度,而 $q$ 是查询的数量。空间复杂度 $O(1)$。
9498

9599
<!-- tabs:start -->
96100

97101
#### Python3
98102

99103
```python
100-
104+
class Solution:
105+
def xorAfterQueries(self, nums: List[int], queries: List[List[int]]) -> int:
106+
mod = 10**9 + 7
107+
for l, r, k, v in queries:
108+
for idx in range(l, r + 1, k):
109+
nums[idx] = nums[idx] * v % mod
110+
return reduce(xor, nums)
101111
```
102112

103113
#### Java
104114

105115
```java
106-
116+
class Solution {
117+
public int xorAfterQueries(int[] nums, int[][] queries) {
118+
final int mod = (int) 1e9 + 7;
119+
for (var q : queries) {
120+
int l = q[0], r = q[1], k = q[2], v = q[3];
121+
for (int idx = l; idx <= r; idx += k) {
122+
nums[idx] = (int) (1L * nums[idx] * v % mod);
123+
}
124+
}
125+
int ans = 0;
126+
for (int x : nums) {
127+
ans ^= x;
128+
}
129+
return ans;
130+
}
131+
}
107132
```
108133

109134
#### C++
110135

111136
```cpp
112-
137+
class Solution {
138+
public:
139+
int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {
140+
const int mod = 1e9 + 7;
141+
for (const auto& q : queries) {
142+
int l = q[0], r = q[1], k = q[2], v = q[3];
143+
for (int idx = l; idx <= r; idx += k) {
144+
nums[idx] = 1LL * nums[idx] * v % mod;
145+
}
146+
}
147+
int ans = 0;
148+
for (int x : nums) {
149+
ans ^= x;
150+
}
151+
return ans;
152+
}
153+
};
113154
```
114155
115156
#### Go
116157
117158
```go
159+
func xorAfterQueries(nums []int, queries [][]int) int {
160+
const mod = int(1e9 + 7)
161+
for _, q := range queries {
162+
l, r, k, v := q[0], q[1], q[2], q[3]
163+
for idx := l; idx <= r; idx += k {
164+
nums[idx] = nums[idx] * v % mod
165+
}
166+
}
167+
ans := 0
168+
for _, x := range nums {
169+
ans ^= x
170+
}
171+
return ans
172+
}
173+
```
174+
175+
#### TypeScript
176+
177+
```ts
178+
function xorAfterQueries(nums: number[], queries: number[][]): number {
179+
const mod = 1e9 + 7;
180+
for (const [l, r, k, v] of queries) {
181+
for (let idx = l; idx <= r; idx += k) {
182+
nums[idx] = (nums[idx] * v) % mod;
183+
}
184+
}
185+
return nums.reduce((acc, x) => acc ^ x, 0);
186+
}
187+
```
118188

189+
#### Rust
190+
191+
```rust
192+
impl Solution {
193+
pub fn xor_after_queries(mut nums: Vec<i32>, queries: Vec<Vec<i32>>) -> i32 {
194+
let modv: i64 = 1_000_000_007;
195+
for q in queries {
196+
let (l, r, k, v) = (q[0] as usize, q[1] as usize, q[2] as usize, q[3] as i64);
197+
let mut idx = l;
198+
while idx <= r {
199+
nums[idx] = ((nums[idx] as i64 * v) % modv) as i32;
200+
idx += k;
201+
}
202+
}
203+
let mut ans = 0;
204+
for x in nums {
205+
ans ^= x;
206+
}
207+
return ans;
208+
}
209+
}
119210
```
120211

121212
<!-- tabs:end -->

solution/3600-3699/3653.XOR After Range Multiplication Queries I/README_EN.md

Lines changed: 95 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,32 +88,123 @@ tags:
8888

8989
<!-- solution:start -->
9090

91-
### Solution 1
91+
### Solution 1: Simulation
92+
93+
We can directly simulate the operations described in the problem by iterating through each query and updating the corresponding elements in the array $\textit{nums}$. Finally, we calculate the bitwise XOR of all elements in the array and return the result.
94+
95+
The time complexity is $O(q \times \frac{n}{k})$, where $n$ is the length of the array $\textit{nums}$ and $q$ is the number of queries. The space complexity is $O(1)$.
9296

9397
<!-- tabs:start -->
9498

9599
#### Python3
96100

97101
```python
98-
102+
class Solution:
103+
def xorAfterQueries(self, nums: List[int], queries: List[List[int]]) -> int:
104+
mod = 10**9 + 7
105+
for l, r, k, v in queries:
106+
for idx in range(l, r + 1, k):
107+
nums[idx] = nums[idx] * v % mod
108+
return reduce(xor, nums)
99109
```
100110

101111
#### Java
102112

103113
```java
104-
114+
class Solution {
115+
public int xorAfterQueries(int[] nums, int[][] queries) {
116+
final int mod = (int) 1e9 + 7;
117+
for (var q : queries) {
118+
int l = q[0], r = q[1], k = q[2], v = q[3];
119+
for (int idx = l; idx <= r; idx += k) {
120+
nums[idx] = (int) (1L * nums[idx] * v % mod);
121+
}
122+
}
123+
int ans = 0;
124+
for (int x : nums) {
125+
ans ^= x;
126+
}
127+
return ans;
128+
}
129+
}
105130
```
106131

107132
#### C++
108133

109134
```cpp
110-
135+
class Solution {
136+
public:
137+
int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {
138+
const int mod = 1e9 + 7;
139+
for (const auto& q : queries) {
140+
int l = q[0], r = q[1], k = q[2], v = q[3];
141+
for (int idx = l; idx <= r; idx += k) {
142+
nums[idx] = 1LL * nums[idx] * v % mod;
143+
}
144+
}
145+
int ans = 0;
146+
for (int x : nums) {
147+
ans ^= x;
148+
}
149+
return ans;
150+
}
151+
};
111152
```
112153
113154
#### Go
114155
115156
```go
157+
func xorAfterQueries(nums []int, queries [][]int) int {
158+
const mod = int(1e9 + 7)
159+
for _, q := range queries {
160+
l, r, k, v := q[0], q[1], q[2], q[3]
161+
for idx := l; idx <= r; idx += k {
162+
nums[idx] = nums[idx] * v % mod
163+
}
164+
}
165+
ans := 0
166+
for _, x := range nums {
167+
ans ^= x
168+
}
169+
return ans
170+
}
171+
```
172+
173+
#### TypeScript
174+
175+
```ts
176+
function xorAfterQueries(nums: number[], queries: number[][]): number {
177+
const mod = 1e9 + 7;
178+
for (const [l, r, k, v] of queries) {
179+
for (let idx = l; idx <= r; idx += k) {
180+
nums[idx] = (nums[idx] * v) % mod;
181+
}
182+
}
183+
return nums.reduce((acc, x) => acc ^ x, 0);
184+
}
185+
```
116186

187+
#### Rust
188+
189+
```rust
190+
impl Solution {
191+
pub fn xor_after_queries(mut nums: Vec<i32>, queries: Vec<Vec<i32>>) -> i32 {
192+
let modv: i64 = 1_000_000_007;
193+
for q in queries {
194+
let (l, r, k, v) = (q[0] as usize, q[1] as usize, q[2] as usize, q[3] as i64);
195+
let mut idx = l;
196+
while idx <= r {
197+
nums[idx] = ((nums[idx] as i64 * v) % modv) as i32;
198+
idx += k;
199+
}
200+
}
201+
let mut ans = 0;
202+
for x in nums {
203+
ans ^= x;
204+
}
205+
return ans;
206+
}
207+
}
117208
```
118209

119210
<!-- tabs:end -->
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {
4+
const int mod = 1e9 + 7;
5+
for (const auto& q : queries) {
6+
int l = q[0], r = q[1], k = q[2], v = q[3];
7+
for (int idx = l; idx <= r; idx += k) {
8+
nums[idx] = 1LL * nums[idx] * v % mod;
9+
}
10+
}
11+
int ans = 0;
12+
for (int x : nums) {
13+
ans ^= x;
14+
}
15+
return ans;
16+
}
17+
};
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
func xorAfterQueries(nums []int, queries [][]int) int {
2+
const mod = int(1e9 + 7)
3+
for _, q := range queries {
4+
l, r, k, v := q[0], q[1], q[2], q[3]
5+
for idx := l; idx <= r; idx += k {
6+
nums[idx] = nums[idx] * v % mod
7+
}
8+
}
9+
ans := 0
10+
for _, x := range nums {
11+
ans ^= x
12+
}
13+
return ans
14+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public int xorAfterQueries(int[] nums, int[][] queries) {
3+
final int mod = (int) 1e9 + 7;
4+
for (var q : queries) {
5+
int l = q[0], r = q[1], k = q[2], v = q[3];
6+
for (int idx = l; idx <= r; idx += k) {
7+
nums[idx] = (int) (1L * nums[idx] * v % mod);
8+
}
9+
}
10+
int ans = 0;
11+
for (int x : nums) {
12+
ans ^= x;
13+
}
14+
return ans;
15+
}
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Solution:
2+
def xorAfterQueries(self, nums: List[int], queries: List[List[int]]) -> int:
3+
mod = 10**9 + 7
4+
for l, r, k, v in queries:
5+
for idx in range(l, r + 1, k):
6+
nums[idx] = nums[idx] * v % mod
7+
return reduce(xor, nums)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
impl Solution {
2+
pub fn xor_after_queries(mut nums: Vec<i32>, queries: Vec<Vec<i32>>) -> i32 {
3+
let modv: i64 = 1_000_000_007;
4+
for q in queries {
5+
let (l, r, k, v) = (q[0] as usize, q[1] as usize, q[2] as usize, q[3] as i64);
6+
let mut idx = l;
7+
while idx <= r {
8+
nums[idx] = ((nums[idx] as i64 * v) % modv) as i32;
9+
idx += k;
10+
}
11+
}
12+
let mut ans = 0;
13+
for x in nums {
14+
ans ^= x;
15+
}
16+
return ans;
17+
}
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function xorAfterQueries(nums: number[], queries: number[][]): number {
2+
const mod = 1e9 + 7;
3+
for (const [l, r, k, v] of queries) {
4+
for (let idx = l; idx <= r; idx += k) {
5+
nums[idx] = (nums[idx] * v) % mod;
6+
}
7+
}
8+
return nums.reduce((acc, x) => acc ^ x, 0);
9+
}

0 commit comments

Comments
 (0)