【刷题笔记】第四天

文章目录

      • [2924. 找到冠军 II](https://leetcode.cn/problems/find-champion-ii/description/?envType=daily-question&envId=2024-04-13!!!)
          • 题目描述
          • 思路分析
      • [1702. 修改后的最大二进制字符串](https://leetcode.cn/problems/maximum-binary-string-after-change/)
          • 题目描述
          • 思路分析
      • [830. 较大分组的位置](https://leetcode.cn/problems/positions-of-large-groups/)
          • 题目描述
          • 思路分析

2924. 找到冠军 II

题目描述

一场比赛中共有 n 支队伍,按从 0n - 1 编号。每支队伍也是 有向无环图(DAG) 上的一个节点。

给你一个整数 n 和一个下标从 0 开始、长度为 m 的二维整数数组 edges 表示这个有向无环图,其中 edges[i] = [ui, vi] 表示图中存在一条从 ui 队到 vi 队的有向边。

a 队到 b 队的有向边意味着 a 队比 b ,也就是 b 队比 a

在这场比赛中,如果不存在某支强于 a 队的队伍,则认为 a 队将会是 冠军

如果这场比赛存在 唯一 一个冠军,则返回将会成为冠军的队伍。否则,返回 -1

思路分析

思路1:

对于u->v这条边,v肯定不是冠军

所以我们遍历所有的边,将那些v标记上,然后判断1到n的每一个节点,如果该节点为标记,则该节点可能为冠军。

注意:冠军只能有一个,如果有多个节点未被标记,说明找不到冠军,就返回-1。

class Solution {public int findChampion(int n, int[][] edges) {int ans = -1;boolean[] loser = new boolean[n]; // u->v, v一定不是冠军for (int[] e : edges) {loser[e[1]] = true;}for (int i = 0; i < n; ++i) {if (loser[i]) continue;if (ans == -1) {ans = i;} else { // 存在多个冠军return -1;}}return ans;}
}

思路2:

入度不为0的节点肯定不是冠军

所有我们先统计所有节点的入度,入度为0的节点可能是冠军

由于冠军只能有一个,所以如果有多个入度为0的节点,则返回-1.

class Solution {public int findChampion(int n, int[][] edges) {int[] in = new int[n];for (int[] e : edges) {in[e[1]]++;}int ans = -1;for (int i = 0; i < n; ++i) {if (in[i] > 0) continue;if (ans == -1) {ans = i;} else { return -1;}}return ans;}
}

1702. 修改后的最大二进制字符串

题目描述

给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:

  • 操作 1 :如果二进制串包含子字符串 "00",你可以用 "10" 将其替换。
    • 比方说, “00010” -> “10010”
  • 操作 2 :如果二进制串包含子字符串 "10" ,你可以用 "01" 将其替换。
    • 比方说, “00010” -> “00001

请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字,那么我们称二进制字符串 x 大于二进制字符串 y

思路分析

贪心

结论一:最终结果不存在两个相邻的0,因为00通过操作1,可以变为10,比00更大。

结论二:最终结果至多只有一个0。
假设存在多个0,并且多个0不相邻,例如字符串101011,对于2 3 位置的10,通过操作2,可以变为01,所以整体字符串变为100111,再通过操作1,00变为10,所以整体字符串变为110111,这就是最终结果。
观察101011100111,相当于将第二个0,移动到第一个0后面,1依次后移。
再观察100111110111,除最后一个0外,其他位置的0变为1。

结论三:全为1的字符串直接返回

所以总结一下最终结果的构成:

假设第一个0出现的位置为i,i位置后面1的个数为cnt个,那么最终结果的后cnt位肯定都是1,第i位置为0,第i位置其他的元素也全为1.

具体做法:统计第一个0后面1的个数,假设是one个,字符串的长度为n,那么最终结果= n - one - 1个1 + 0 + cnt个1

class Solution {public String maximumBinaryString(String binary) {int n = binary.length();int one = 0; // 记录第一个0后面的1的个数boolean flag = false; // 标记第一个0是否出现for (int i = 0; i < binary.length(); ++i) {if (flag && binary.charAt(i) == '1') {one++;}if (binary.charAt(i) == '0') {flag = true;}}if (!flag && one == 0) {// 如果全为1(0没有出现),直接返回binaryreturn binary;}StringBuilder sb = new StringBuilder();for (int i = 0; i < n - one - 1; ++i) {sb.append("1");}sb.append("0");for (int i = 0; i < one; ++i) {sb.append("1");}return sb.toString();}
}

830. 较大分组的位置

题目描述

在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。

例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z""yy" 这样的一些分组。

分组可以用区间 [start, end] 表示,其中 startend 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6]

我们称所有包含大于或等于三个连续字符的分组为 较大分组

找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。

思路分析

双指针

一个指针标记区间开始,一个指针标记区间结束

class Solution {public List<List<Integer>> largeGroupPositions(String s) {List<List<Integer>> ans = new ArrayList<>();List<Integer> t = new ArrayList<>();int l = 0, r = 1;while (l < s.length()) {if (r < s.length() && s.charAt(r) == s.charAt(r - 1)) {// 区间扩张r++;} else {if (r - l >= 3) {// 区间长度大于等于3,收集结果t.add(l);t.add(r - 1);ans.add(new ArrayList<>(t));t = new ArrayList<>();}l = r;r = l + 1;}}return ans;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习java第四十四天

Resource 是如何被查找、加载的 Resource 接口是 Spring 资源访问策略的抽象&#xff0c;它本身并不提供任何资源访问实现&#xff0c;具体的资源访问由该接口的实现类完成——每个实现类代表一种资源访问策略。 Spring 为 Resource 接口提供了如下实现类&#xff1a; UrlRes…

vue 开发 滑动页面中出现tabs 并且需要分页的

效果 需求 我们这个页面顶部有tabs 栏 而且可以滑动到底部 进行分页 实现这样的页面我们应该怎么做 你应该会想到scroll-view 这个组件吧 下面我们来详情介绍一下这个页面的实现和功能开发 首先展示一下代码 item 循环项 <template><div class"wechat-or…

dataease部署安装手册

离线安装 1 环境要求 部署服务器要求&#xff1a; 操作系统: Ubuntu 22.04 / CentOS 7 64 位系统CPU/内存: 4核8G磁盘空间: 200G 2 下载离线安装包 请自行下载 DataEase 最新版本的基础安装包&#xff0c;并复制到目标机器的 /tmp 目录下。 安装包下载链接: 开源社区 - FI…

Clustering and Projected Clustering with Adaptive Neighbors 论文阅读

1 Abstract 许多聚类方法基于输入数据的相似性矩阵对数据组进行划分。因此&#xff0c;聚类结果高度依赖于数据相似性学习。由于相似性度量和数据聚类通常是分两步进行的&#xff0c;学习到的数据相似性可能不是数据聚类的最佳选择&#xff0c;从而导致次优结果。在本文中&…

蓝牙耳机哪个品牌的好?五款实力超群品牌分享推荐!

​音乐不仅仅是一种娱乐&#xff0c;它还能激发灵感、放松心情。一款优质的蓝牙耳机能够让音乐体验更加丰富和便捷。在众多的蓝牙耳机中&#xff0c;我特别挑选了几款在音质、设计和功能上都表现出色的产品。无论你是在家中放松、在健身房锻炼&#xff0c;还是在通勤路上&#…

团体程序设计天梯赛 L2-023 图着色问题

L2-023 图着色问题 分数 25 图着色问题是一个著名的NP完全问题。给定无向图G(V,E)&#xff0c;问可否用K种颜色为V中的每一个顶点分配一种颜色&#xff0c;使得不会有两个相邻顶点具有同一种颜色&#xff1f; 但本题并不是要你解决这个着色问题&#xff0c;而是对给定的一种…

鸿蒙 UI预览报错

SyntaxError: Unexpected end of JSON input 删除entry下的.preview文件 重新刷新预览

【主从恢复】利用xtrabackup备份MySQL主库恢复从库

简介 记录一下自己用xtrabackup恢复从库的经过一、备份 1.用到的参数介绍 --backup: 指明为备份 --target-dir: 备份的目录 --defaults-file:指明服务器的配置文件&#xff0c;此参数必须作为innobackupex的第一个参数&#xff0c;否则报错 --login-path: 从登录文件中读取此…

Mybatis-动态标签

动态标签 1.用于处理SQL语句中的空白字符和多余的逗号 -- prefix&#xff1a;指定在SQL语句开头添加的内容。 -- prefixOverrides&#xff1a;指定需要移除的开头部分的内容。 -- suffix&#xff1a;指定在SQL语句结尾添加的内容。 -- suffixOverrides&#xff1a;指定需要移…

从IPv4到IPv6:解密网络通信的新时代

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 从IPv4到IPv6&#xff1a;解密网络通信的新时代 前言ipv4介绍ipv6介绍IPv4与IPv6的区别IPv4地址枯竭问题和IPv6的解决方案 ipv6的优势IPv6在新兴技术领域的应用 ipv4向ipv6的过渡挑战解决方案IPv6部署…

电压比较器LM339介绍和仿真

电压比较器LM339介绍和仿真 &#x1f4d1;LM339相关特性 工作电源电压范围宽&#xff0c;单电源、双电源均可工作&#xff0c;单电源&#xff1a; 2&#xff5e;36V&#xff0c;双电源&#xff1a;1&#xff5e;18V&#xff1b;消耗电流小&#xff0c; Icc1.3mA&#xff1b;输…

2023年待业10个月共313天

2023.5.5美团毕业&#xff0c;至2024.3.14入职下一家公司&#xff0c;待业10个月共313天。这313天&#xff0c;大概经历了3个阶段&#xff1a; 第一阶段 从美团毕业后2023.5.6开始。 虽然在此之前已经开始了部分面试&#xff0c;但合适的机会不多&#xff0c;因为才毕业并不…

怎么使用JMeter进行性能测试?

一、简介 JMeter是Apache软件基金会下的一款开源的性能测试工具&#xff0c;完全由Java开发。它专注于对我们应用程序进行负载测试和性能测量&#xff0c;最初设计用于web应用程序&#xff0c;现在已经扩展到其他测试功能&#xff0c;比如&#xff1a;FTP、Database和LDAP等。…

CompletableFuture用法详解

CompletableFuture 1 前言1.1 Fork/Join1.2 Future接口的局限性 2 正文2.1 神奇的CompletableFuture2.2 CompletableFuture API2.3 组合式异步编程2.4 几个小例子 1 前言 1.1 Fork/Join 1.概念 Fork/Join 是 JDK 1.7 加入的新的线程池实现&#xff0c;它体现的是一种分治思想…

【项目实战】记录一次PG数据库迁移至GaussDB测试(下)

上一篇分享了安装、迁移&#xff0c;本篇将继续分享迁移前操作、 DRS迁移数据、迁移后一致性检查、问题总结及解决方法。 目录 四、迁移前操作 4.1 源端(PG) 4.2 目标端(GaussDB库) 五、DRS迁移数据 5.1 创建复制用户 5.2创建迁移任务。 六、迁移后一致性检查 6.1使用…

maven 基础用法 (终端界面和IDEA界面)

目录 maven定义 Maven环境配置 仓库 本地仓库 关于pom.xml 运行方式 关于maven在IDEA创建 maven定义 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化&#xff0c; 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 ​ Maven 简化了…

【HarmonyOS 4+NEXT】开发工具安装指南

&#x1f64b;‍ 一日之际在于晨 ⭐本期内容&#xff1a;开发工具安装 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS4NEXT&#xff1a;探索未来智能生态新纪元 文章目录 前言准备工作下载开发工具安装开发工具配置开发环境总结 前言 随着科技的不断进步&#xff0c;智能设…

浅析Redis④:字典dict实现

什么是dict&#xff1f; 在 Redis 中&#xff0c;dict 是指哈希表&#xff08;hash table&#xff09;的一种实现&#xff0c;用于存储键值对数据。dict 是 Redis 中非常常用的数据结构之一&#xff0c;用于实现 Redis 的键空间。 在 Redis 源码中&#xff0c;dict 是一个通用…

7-3 jmu-Java-03面向对象基础-05-覆盖(分数 3)

Java每个对象都继承自Object,都有equals、toString等方法。 现在需要定义PersonOverride类并覆盖其toString与equals方法。 1. 新建PersonOverride类 a. 属性&#xff1a;String name、int age、boolean gender&#xff0c;所有的变量必须为私有(private)。 b. 有参构造方法…

IO流-字节缓冲流

简介 缓冲流就是对原始流进行包装&#xff0c;以提高原始数据流读写数据的性能 缓冲流继承体系 缓冲流的作用 构造器API 代码示例 try(// 创建字节输入流和输出流InputStream is new FileInputStream("test.txt");OutputStream os new FileOutputStream("test…