第三十八天
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;
}
}










