【leetcode刷题第38天】1791.找出星型图中的中心节点、1588.所有长度为奇数的子数组的和、1310.子数组异或查询

第三十八天

1791 找出星型图的中心节点

有一个无向的 星型 图,由 n 个编号从 1n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。

给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点uivi 之间存在一条边。请你找出并返回 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,请你计算从 LiRiXOR 值。

并返回一个包含给定查询 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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值