mirror of
https://gitlab.com/game-loader/hugo.git
synced 2025-04-20 14:02:07 +08:00
leetcode udpate
This commit is contained in:
parent
0a4a8c3738
commit
9690039188
@ -6603,3 +6603,47 @@ func numSteps(s string) int {
|
|||||||
### 总结
|
### 总结
|
||||||
|
|
||||||
本题直接从最后一位开始向前遍历, 遇到0直接将结果加1, 遇到1设定一个标记进位的标记变量为1, 同时将结果加2, 如此重复即可. 注意在每次判断当前位是0还是1之前要将原本的当前位值加上进位的标记变量再判断.
|
本题直接从最后一位开始向前遍历, 遇到0直接将结果加1, 遇到1设定一个标记进位的标记变量为1, 同时将结果加2, 如此重复即可. 注意在每次判断当前位是0还是1之前要将原本的当前位值加上进位的标记变量再判断.
|
||||||
|
|
||||||
|
## day94 2024-05-30
|
||||||
|
### 1442. Count Triplets That Can Form Two Arrays of Equal XOR
|
||||||
|
Given an array of integers arr.
|
||||||
|
|
||||||
|
We want to select three indices i, j and k where (0 <= i < j <= k < arr.length).
|
||||||
|
|
||||||
|
Let's define a and b as follows:
|
||||||
|
|
||||||
|
a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
|
||||||
|
b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
|
||||||
|
Note that ^ denotes the bitwise-xor operation.
|
||||||
|
|
||||||
|
Return the number of triplets (i, j and k) Where a == b.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 题解
|
||||||
|
|
||||||
|
题目中要求i-j和j-k之间的数组元素全部异或后的值相等, 而i<j<=k. 两个相同的值异或后的值为0, 因此可以得出结论, i-k之间的数异或后的值为0(i-j,j-k范围内的数异或后的值相同). i-k区间内的数异或后的值为0, 就意味着从头开始到i和从头开始到k这两个区间的数异或的值相等(不一定为0). 遍历数组, 计算到当前下标处的异或值. 并将异或值作为key, 下标作为value保存到map中, 计算得到异或值后查询map, 找到与当前下标异或值相等的全部下标, 并将这些区间内的所有可行分割(长度为n的区间有n-1种分割方法, 直观理解放木板到这个区间的数字之间, 一共能放几块就是几种分割方法)数目添加到结果中.
|
||||||
|
|
||||||
|
### 代码
|
||||||
|
```go
|
||||||
|
func countTriplets(arr []int) int {
|
||||||
|
xormap := map[int][]int{}
|
||||||
|
xormap[0] = []int{-1}
|
||||||
|
xornow := 0
|
||||||
|
result := 0
|
||||||
|
beforeslice := []int{}
|
||||||
|
for index, value := range arr{
|
||||||
|
xornow = xornow ^ value
|
||||||
|
beforeslice = xormap[xornow]
|
||||||
|
if len(beforeslice) == 0{
|
||||||
|
xormap[xornow] = []int{index}
|
||||||
|
}else{
|
||||||
|
for _, sameindex := range beforeslice{
|
||||||
|
result += index - sameindex - 1
|
||||||
|
}
|
||||||
|
xormap[xornow] = append(xormap[xornow], index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user