kylin来刷题啦-Day12

203 阅读1分钟

这是我参与更文挑战的第23天,活动详情查看: 更文挑战

1688. 比赛中的配对次数

题目描述

给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:

  • 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。
  • 如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。 返回在比赛中进行的配对次数,直到决出获胜队伍为止。

友情链接

leetcode-cn.com/problems/co…

算法实现

class Solution {
    int res=0;
    public int numberOfMatches(int n) {
        if(n==1) return 0;
        int res=(n%2==0?n/2:(n/2)+1);
        return numberOfMatches(res)+n/2;
    }
}

运行结果

image.png

1863. 找出所有子集的异或总和再求和

题目描述

一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。

  • 例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。 给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。

注意: 在本题中,元素 相同 的不同子集应 多次 计数。

数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。

友情链接

leetcode-cn.com/problems/su…

算法实现

class Solution {
    public int subsetXORSum(int[] nums) {
        int ans=0,length=nums.length;
        for(int i=0;i<(1<<length);i++){
            int res=0;
            for(int j=0;j<length;j++){
                if((i&(1<<j))>0){
                    res=res^nums[j];
                }
            }
            ans+=res;
        }
        return ans;
    }
}

运行结果

image.png