【力扣周赛】第 372 场周赛( ⭐查询 离线做法)TODO

文章目录

  • 竞赛链接
  • Q1:2937. 使三个字符串相等
    • 竞赛时代码——检查三个字符串的最长公共前缀子串
  • Q2:2938. 区分黑球与白球
    • 竞赛时代码
  • Q3:2939. 最大异或乘积
  • Q4:2940. 找到 Alice 和 Bob 可以相遇的建筑⭐⭐⭐⭐⭐
    • 解法1——离线做法+最小堆
    • 解法2——在线做法+线段树二分(TODO)
    • 相关题目(强制在线)——2286. 以组为单位订音乐会的门票(TODO)
  • 成绩记录

竞赛链接

https://leetcode.cn/contest/weekly-contest-372/

Q1:2937. 使三个字符串相等

https://leetcode.cn/problems/make-three-strings-equal/description/
在这里插入图片描述

提示:

1 <= s1.length, s2.length, s3.length <= 100
s1、s2 和 s3 仅由小写英文字母组成。

竞赛时代码——检查三个字符串的最长公共前缀子串

class Solution {
    public int findMinimumOperations(String s1, String s2, String s3) {
        int n1 = s1.length(), n2 = s2.length(), n3 = s3.length();
        int n = Math.min(Math.min(n1, n2), n3);
        int i = 0;
        while (i < n) {
            char a = s1.charAt(i), b = s2.charAt(i), c = s3.charAt(i);
            if (a != b || b != c || a != c) break;
            i++;
        }
        if (i == 0) return -1;
        return n1 + n2 + n3 - 3 * i;
    }
}

Q2:2938. 区分黑球与白球

https://leetcode.cn/problems/separate-black-and-white-balls/description/
在这里插入图片描述

提示:

1 <= n == s.length <= 10^5
s[i] 不是 '0',就是 '1'。

竞赛时代码

对于每个 0,它左边有多少个 1,就移动多少次。

class Solution {
    public long minimumSteps(String s) {
        long ans = 0, c = 0;
        for (char ch: s.toCharArray()) {
            if (ch == '1') c++;
            else ans += c;
        }
        return ans;
    }
}

Q3:2939. 最大异或乘积

https://leetcode.cn/problems/maximum-xor-product/description/
在这里插入图片描述

提示:

0 <= a, b < 250
0 <= n <= 50

竞赛时代码——位运算

要想乘积最大,两个数字在总和一定的情况下最好相差不大。

class Solution {
    final long MOD = (long)1e9 + 7;
    
    public int maximumXorProduct(long a, long b, int n) {
        // aa和bb记录a xor x 和 b xor x 的结果
        long aa = 0, bb = 0;
        for (int i = 62; i >= n; --i) {
            if ((a >> i & 1) == 1) aa |= 1L << i;
            if ((b >> i & 1) == 1) bb |= 1L << i;
        }
        // 为a和b尽量均匀分配
        for (int i = n - 1; i >= 0; --i) {
            boolean x = (a >> i & 1) == 1, y = (b >> i & 1) == 1;
            if (x == y) {           // 如果x和y可以同时为1
                aa |= 1L << i;
                bb |= 1L << i;
            } else{                 // 不能,就分配给当前小的
                if (aa <= bb) {
                    aa |= 1L << i;
                } else {
                    bb |= 1L << i;
                }
            }
        }
        return (int)(((aa % MOD) * (bb % MOD)) % MOD);
    }
}

解法2—— O ( 1 ) O(1) O(1)做法👍(大量位运算技巧)

https://leetcode.cn/problems/maximum-xor-product/solutions/2532915/o1-zuo-fa-wei-yun-suan-de-qiao-miao-yun-lvnvr/

其实所谓的均匀分配,对于二进制来说,当最高位分配给一个之后,其它的所有位都要分配给另一个了。
在这里插入图片描述

class Solution {
    public int maximumXorProduct(long a, long b, int n) {
        // 保证 a >= b
        if (a < b) {
            long temp = a;
            a = b;
            b = temp;
        }

        long mask = (1L << n) - 1;
        // 取出被n异或截断之前的
        long ax = a & ~mask;
        long bx = b & ~mask;
        // 低于第n位的,能被x影响
        a &= mask;
        b &= mask;

        // left是可分配的位置,a xor x和b xor x一个是1,另一个是0
        long left = a ^ b;
        long one = mask ^ left; // 这些是不需要分配的
        ax |= one;
        bx |= one;

        // 现在把left分配到ax和bx
        // 根据基本不等式(均值定理),分配后应当使ax和bx尽量接近,乘积才能尽量大
        if (left > 0 && ax == bx) {
            long highBit = 1L << (63 - Long.numberOfLeadingZeros(left));
            ax |= highBit;
            left ^= highBit;
        }
        // 如果 a & ~mask 更大,则应当全部分给bx
        bx |= left;
        final long MOD =1_000_000_007;
        return (int)(ax % MOD * (bx % MOD) % MOD);
    }
}

确实是 O ( 1 ) O(1) O(1) 的,里面用到了很多位运算的技巧。

Q4:2940. 找到 Alice 和 Bob 可以相遇的建筑⭐⭐⭐⭐⭐

https://leetcode.cn/problems/find-building-where-alice-and-bob-can-meet/description/
在这里插入图片描述

提示:

1 <= heights.length <= 5 * 10^4
1 <= heights[i] <= 109
1 <= queries.length <= 5 * 10^4
queries[i] = [ai, bi]
0 <= ai, bi <= heights.length - 1

解法1——离线做法+最小堆

https://leetcode.cn/problems/find-building-where-alice-and-bob-can-meet/solutions/2533058/chi-xian-zui-xiao-dui-pythonjavacgo-by-e-9ewj/

离线:按照自己定义的某种顺序回答询问(而不是按照输入顺序一个个地回答)。

在这里插入图片描述

class Solution {
    public int[] leftmostBuildingQueries(int[] heights, int[][] queries) {
        int[] ans = new int[queries.length];
        Arrays.fill(ans, -1);
        // 记录该位置 作为右边下标 需要回复的左边下标 和 对应的查询下标
        List<int[]>[] left = new ArrayList[heights.length];
        Arrays.setAll(left, e -> new ArrayList<>());
        // 枚举查询
        for (int qi = 0; qi < queries.length; qi++) {
            int i = queries[qi][0], j = queries[qi][1];
            // 保证 i <= j
            if (i > j) {
                int temp = i;
                i = j;
                j = temp;
            }
            if (i == j || heights[i] < heights[j]) {
                // 如果能回答就先回答
                ans[qi] = j;
            } else {
                // 还不能回答,离线
                left[j].add(new int[]{heights[i], qi});   
            }
        }

        // 最小堆,因为高度更小的位置更容易回答
        PriorityQueue<int[]> pq  = new PriorityQueue<>((a, b) -> a[0] - b[0]);
        // 从小到大枚举下标 i
        for (int i = 0; i < heights.length; ++i) {
            // 当前位置更高,可以作为答案
            while (!pq.isEmpty() && pq.peek()[0] < heights[i]) {
                ans[pq.poll()[1]] = i;
            }
            // 该部分的答案之后可以回答
            for (int[] p: left[i]) {
                pq.offer(p);
            }
        }
        return ans;
    }
}

解法2——在线做法+线段树二分(TODO)

https://leetcode.cn/problems/find-building-where-alice-and-bob-can-meet/solutions/2533058/chi-xian-zui-xiao-dui-pythonjavacgo-by-e-9ewj/

在这里插入代码片

相关题目(强制在线)——2286. 以组为单位订音乐会的门票(TODO)

https://leetcode.cn/problems/booking-concert-tickets-in-groups/description/
在这里插入图片描述
提示:

1 <= n <= 5 * 10^4
1 <= m, k <= 10^9
0 <= maxRow <= n - 1
gather 和 scatter 总 调用次数不超过 5 * 10^4 次。

在这里插入代码片

成绩记录

在这里插入图片描述

小上一分。
发现现在WA越来越频繁了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/235167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php中json_encode编码json中出现HTML代码导致无法正常输出的解决办法

$options JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT; $data array(key > <p>test</p>);echo json_encode($data, $options);JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, 和 JSON_HEX_QUOT 是 PHP 中 json_encode() 函数的常量选项&#…

Pytorch-CNN轴承故障一维信号分类(二)

目录 前言 1 数据集制作与加载 1.1 导入数据 1.2 数据加载&#xff0c;训练数据、测试数据分组&#xff0c;数据分batch 2 CNN-2D分类模型和训练、评估 2.1 定义CNN-2d分类模型 2.2 定义模型参数 2.3 模型结构 2.4 模型训练 2.5 模型评估 3 CNN-1D分类模型和训练、评…

【密码学基础】Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…

java应用打包运行的4种方法

文章目录 1、方法一&#xff1a;打成jar部署运行2、方法二&#xff1a;通过自制启动器的方式运行3、方法三&#xff1a;使用jpackage把java和jdk一起打包4、方法四&#xff1a;使用GraalVM编译为原生应用4.1、使用native-image-agent(Graalvm内工具)工具来收集这些运行库信息4.…

软件无线电SDR-频谱采集python实现

sdr做的频谱采集&#xff0c;保存的500张频谱图&#xff0c;能看出来是什么东西吗&#xff1f;

成都工业学院Web技术基础(WEB)实验四:CSS3布局应用

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

perl使用Archive::Tar模块进行文件打包

使用perl的Archive::Tar 模块打包文件夹中的指定文件&#xff0c;输出格式 .tar.gz 。下面是perl代码&#xff1a; #! /usr/bin/perl use v5.14; use File::Find; use Archive::Tar;my filesArry (); my $callback sub {push filesArry, $File::Find::name if -f; };find($c…

【Hive】启动beeline连接hive报错解决

1、解决报错2、在datagrip上连接hive 1、解决报错 刚开始一直报错&#xff1a;启动不起来 hive-site.xml需要配置hiveserver2相关的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bin…

如何打印富文本控件中的内容?

出于某种原因&#xff0c;人们确实对打印富文本控件中的内容感到困惑。 我并非打印方面的专家&#xff0c;但是经过对资料的研究的&#xff0c;我也算弄明白了&#xff0c;今天在此记录一下。 解决问题的关键是这个消息&#xff1a;EM_FORMATRANGE。 每次发送这个消息的时候&a…

Vue 3项目的目录结构

使用vite创建完VUE项目后&#xff0c;使用VS Code编辑器打开项目目录&#xff0c;可以看到一个默认生成的项目目录结构 下图是目录结构&#xff1a; 详细介绍.vscode&#xff1a;存放VS Code编辑器的相关配置。 node_modules&#xff1a;存放项目的各种依赖和安装的插件。…

C# WPF上位机开发(通讯协议的编写)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 作为上位机&#xff0c;它很重要的一个部分就是需要和外面的设备进行数据沟通的。很多时候&#xff0c;也就是在这个沟通的过程当中&#xff0c;上…

极狐GitLab 与 Flux 集成实现 GitOps

目录 flux 和 GitOps 极狐GitLab 与 flux 的集成 flux 命令行安装 极狐GitLab flux GitOps GitOps Demo 写在最后 flux 和 GitOps 众所周知&#xff0c;weaveworks 公司在 2017 年提出了 GitOps 这个概念&#xff0c;而 flux 是 weaveworks 开源的一款对 Kubernetes 上的…

【总结】机器学习中的15种分类算法

目录 一、机器学习中的分类算法 1.1 基础分类算法 1.2 集成分类算法 1.3 其它分类算法&#xff1a; 二、各种机器学习分类算法的优缺点 分类算法也称为模式识别&#xff0c;是一种机器学习算法&#xff0c;其主要目的是从数据中发现规律并将数据分成不同的类别。分类算法通…

golang学习笔记——go流水线示例

range与数组、切片、集合 Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值&#xff0c;在集合中返回 key-value 对。 for 循环的 range 格式可以对 slice、map、数组、字…

计算机网络课程设计【Python实现】

一、网络聊天程序的设计与实现 1、实验目的 使用Socket编程&#xff0c;了解Socket通信的原理&#xff0c;会使用Socket进行简单的网络编程&#xff0c;并在此基础上编写聊天程序&#xff0c;运行服务器端和客户端&#xff0c;实现多个客户端通过服务器端进行通信。 2、总体设…

MongoDB 的复制(副本集)

本文主要介绍MongoDB的复制&#xff08;副本集&#xff09;。 目录 MongoDB的复制&#xff08;副本集&#xff09;特点搭建步骤注意事项 MongoDB的复制&#xff08;副本集&#xff09; MongoDB复制是一种提供数据冗余和高可用性的方法。复制是通过在多个节点上维护数据的副本来…

机器学习与人工智能:一场革命性的变革

机器学习与人工智能&#xff1a;一场革命性的变革 人工智能的概述什么是机器学习定义解释 数据集结构机器学习应用场景 人工智能的概述 1956年8月&#xff0c;在美国汉诺斯小镇宁静的达特茅斯学院中&#xff0c;约翰麦卡锡&#xff08;John McCarthy&#xff09;、马文闵斯基&…

科学小论文

赵州桥&#xff0c;是一座右拱桥&#xff0c;它座落于河北省石家庄市赵县城南液河之上。 赵州桥因赵县古称赵州而得名&#xff0c;当地人称之为大石桥&#xff0c;以区别于城西门外的永通桥&#xff0c;也称小石桥。 赵州桥始建于隋代&#xff0c;由匠师李春设计建造&#xff…

第一百九十九回 如何获取设备信息

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 我们在上一章回中介绍了包管理相关的内容&#xff0c;本章回中将介绍如何使用url_launcher包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里介绍url_launcher包主要用来打开…