第三十八天
1791 找出星型图的中心节点
有一个无向的 星型 图,由 n
个编号从 1
到 n
的节点组成。星型图有一个 中心 节点,并且恰有 n - 1
条边将中心节点与其他每个节点连接起来。
给你一个二维整数数组 edges
,其中 edges[i] = [ui, vi]
表示在节点ui
和 vi
之间存在一条边。请你找出并返回 edges
所表示星型图的中心节点。
方法
找出前两条边的公共元素即可。
class Solution {
public int findCenter(int[][] edges) {
return edges[0][0] == edges[1][0] ? edges[0][0] : edges[0][0] == edges[1][1] ? edges[0][0] : edges[0][1];
}
}
1588 所有奇数长度子数组的和
给你一个正整数数组 arr
,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。
请你返回 arr
中 所有奇数长度子数组的和 。
方法一
前缀和,模拟。
class Solution {
public int sumOddLengthSubarrays(int[] arr) {
int[] sum = new int[arr.length + 1];
for (int i = 1; i <= arr.length; ++i){
sum[i] = sum[i - 1] + arr[i - 1];
}
int res = 0;
for (int l = 1; l <= arr.length; l += 2){
for (int i = l; i <= arr.length; i++){
res += sum[i] - sum[i - l];
}
}
return res;
}
}
方法二
统计每一个数字出现的次数,然后求和即可。
1310 子数组异或查询
有一个正整数数组 arr
,现给你一个对应的查询数组 queries
,其中 queries[i] = [Li, Ri]
。
对于每个查询 i
,请你计算从 Li
到 Ri
的 XOR 值。
并返回一个包含给定查询 queries
所有结果的数组。
方法
前缀异或,利用异或的性质,异或与本身为逆运算。
class Solution {
public int[] xorQueries(int[] arr, int[][] queries) {
int[] preXor = new int[arr.length + 1];
for (int i = 1; i <= arr.length; ++i){
preXor[i] = preXor[i - 1] ^ arr[i - 1];
}
int index = 0;
int[] res = new int[queries.length];
for (int[] query : queries){
res[index++] = preXor[query[0]] ^ preXor[query[1] + 1];
}
return res;
}
}