leetcode第8场双周赛

2023-11-20

这次双周赛有意外,第二第三题按照提示返回int[]会报错,要返回List

第一题
给你一个字符串 S,返回只含 单一字母 的子串个数。

示例 1:
输入: “aaaba”
输出: 8
解释:
只含单一字母的子串分别是 “aaa”, “aa”, “a”, “b”。
“aaa” 出现 1 次。
“aa” 出现 2 次。
“a” 出现 4 次。
“b” 出现 1 次。
所以答案是 1 + 2 + 4 + 1 = 8。

public int countLetters(String S) {
	if (S.length() == 0) {
		return 0;
	}
	char[] cs = S.toCharArray();
	char cc = cs[0];
	int k = 1;
	int ans = 0;
	for (int i = 1; i < cs.length; i++) {
		char c = cs[i];
		if (c == cc) {
			k++;
		} else {
			cc = c;
			ans += getAns(k);
			k = 1;
		}
	}
	ans += getAns(k);
	return ans;
}


private int getAns(int k) {
	return k*(k+1)/2;
}

第二题
给你一个「短语」列表 phrases,请你帮忙按规则生成拼接后的「新短语」列表。
「短语」(phrase)是仅由小写英文字母和空格组成的字符串。「短语」的开头和结尾都不会出现空格,「短语」中的空格不会连续出现。
「前后拼接」(Before and After puzzles)是合并两个「短语」形成「新短语」的方法。我们规定拼接时,第一个短语的最后一个单词 和 第二个短语的第一个单词 必须相同。
返回每两个「短语」 phrases[i] 和 phrases[j](i != j)进行「前后拼接」得到的「新短语」。
注意,两个「短语」拼接时的顺序也很重要,我们需要同时考虑这两个「短语」。另外,同一个「短语」可以多次参与拼接,但「新短语」不能再参与拼接。
请你按字典序排列并返回「新短语」列表,列表中的字符串应该是 不重复的 。

示例 1:
输入:phrases = [“writing code”,“code rocks”]
输出:[“writing code rocks”]

示例 2:
输入:phrases = [“mission statement”,
“a quick bite to eat”,
“a chip off the old block”,
“chocolate bar”,
“mission impossible”,
“a man on a mission”,
“block party”,
“eat my words”,
“bar of soap”]
输出:[“a chip off the old block party”,
“a man on a mission impossible”,
“a man on a mission statement”,
“a quick bite to eat my words”,
“chocolate bar of soap”]

public  List<String> beforeAndAfterPuzzles(String[] phrases) {
	Map<String, List<Integer>> topMap = new HashMap<>();
	Map<String, List<Integer>> endMap = new HashMap<>();
	Set<String> ans = new HashSet<String>();
	String[][] res = new String[phrases.length][];
	for (int i = 0; i < phrases.length; i++) {
		String s = phrases[i];
		String[] ss = s.split(" ");
		res[i] = ss;
		List<Integer> topList = topMap.get(ss[0]);
		if (topList == null) {
			topList = new ArrayList<Integer>();
			topMap.put(ss[0], topList);
		}
		topList.add(i);
		List<Integer> endList = endMap.get(ss[ss.length - 1]);
		if (endList == null) {
			endList = new ArrayList<Integer>();
			endMap.put(ss[ss.length - 1], endList);
		}
		endList.add(i);
	}
	for (String topKey : topMap.keySet()) {
		List<Integer> endList = endMap.get(topKey);
		if (endList == null) {
			continue;
		}
		List<Integer> topList = topMap.get(topKey);
		for (Integer top : topList) {
			for (Integer end : endList) {
				if (top == end) {
					continue;
				}
				ans.add(getRes(res[end], res[top]));
			}
		}
	}
	List<String> ree  = new ArrayList<String>(ans);
	ree.sort(new Comparator<String>() {

		@Override
		public int compare(String o1, String o2) {
			// TODO Auto-generated method stub
			return o1.compareTo(o2);
		}
	});
	return ree;
}

private String getRes(String[] res, String[] res2) {
	String ans = "";
	for (int i = 0; i < res.length - 1; i++) {
		ans += " " + res[i];
	}
	for (int i = 0; i < res2.length; i++) {
		ans += " " + res2[i];
	}
	return ans.substring(1);
}

第三题
给你一个数组 colors,里面有 1、2、 3 三种颜色。
我们需要在 colors 上进行一些查询操作 queries,其中每个待查项都由两个整数 i 和 c 组成。
现在请你帮忙设计一个算法,查找从索引 i 到具有目标颜色 c 的元素之间的最短距离。
如果不存在解决方案,请返回 -1。

示例 1:
输入:colors = [1,1,2,1,3,2,2,3,3], queries = [[1,3],[2,2],[6,1]]
输出:[3,0,3]
解释:
距离索引 1 最近的颜色 3 位于索引 4(距离为 3)。
距离索引 2 最近的颜色 2 就是它自己(距离为 0)。
距离索引 6 最近的颜色 1 位于索引 3(距离为 3)。

这道题其实就是左右各找一次,找到短的那个

public List<Integer> shortestDistanceColor(int[] colors, int[][] queries) {
	List<Integer> ans = new ArrayList<Integer>();
	int coLen = colors.length;
	int[][] left = new int[3][coLen];
	int[][] right = new int[3][coLen];
	int[] len = new int[3];
	len[0] = 100000;
	len[1] = 100000;
	len[2] = 100000;
	for (int i = 0; i < coLen; i++) {
		len[colors[i]%3] = 0;
		len[(colors[i] + 1) % 3]++;
		len[(colors[i] + 2) % 3]++;

		left[0][i] = len[0];
		left[1][i] = len[1];
		left[2][i] = len[2];
	}
	len[0] = 100000;
	len[1] = 100000;
	len[2] = 100000;
	for (int i = coLen - 1; i >= 0; i--) {
		len[colors[i]%3] = 0;
		len[(colors[i] + 1) % 3]++;
		len[(colors[i] + 2) % 3]++;

		right[0][i] = Math.min(len[0], left[0][i]);
		right[1][i] = Math.min(len[1], left[1][i]);
		right[2][i] = Math.min(len[2], left[2][i]);
	}
	for (int i = 0; i < queries.length; i++) {
		int key = queries[i][0];
		int v = queries[i][1]%3;
		ans.add(right[v][key] >= 100000 ? -1 : right[v][key]);
	}
	return ans;
}

第四题

现在有一个尺寸为 width * height 的矩阵 M,矩阵中的每个单元格的值不是 0 就是 1。
而且矩阵 M 中每个大小为 sideLength * sideLength 的 正方形 子阵中,1 的数量不得超过 maxOnes。
请你设计一个算法,计算矩阵中最多可以有多少个 1。

示例 1:
输入:width = 3, height = 3, sideLength = 2, maxOnes = 1
输出:4
解释:
题目要求:在一个 33 的矩阵中,每一个 22 的子阵中的 1 的数目不超过 1 个。
最好的解决方案中,矩阵 M 里最多可以有 4 个 1,如下所示:
[1,0,1]
[0,0,0]
[1,0,1]

示例 2:
输入:width = 3, height = 3, sideLength = 2, maxOnes = 2
输出:6
解释:
[1,0,1]
[1,0,1]
[1,0,1]

提示:
1 <= width, height <= 100
1 <= sideLength <= width, height
0 <= maxOnes <= sideLength * sideLength

这道题你要理解1填的位置的优先顺序,然后就知道怎么做了
每个sideLength * sideLength的格子,1的方位应该一致

public int maximumNumberOfOnes(int width, int height, int sideLength,
		int maxOnes) {
	int wYu = width % sideLength;
	int hYu = height % sideLength;
	int wN = width / sideLength;
	int hN = height / sideLength;
	int ans = wN * hN * maxOnes;
	if (maxOnes <= wYu * hYu) {
		ans += maxOnes * (wN + hN + 1);
		return ans;
	}
	ans += wYu * hYu;
	if (wN >= hN) {
		if (maxOnes <= hYu * sideLength) {
			return ans + wYu * hYu * hN + maxOnes * wN;
		} else if (((maxOnes - hYu * sideLength) + wYu * hYu) <= sideLength
				* wYu) {
			return ans + hYu * sideLength * wN
					+ ((maxOnes - hYu * sideLength) + wYu * hYu) * hN;
		} else {
			return width * height - wN * hN
					* (sideLength * sideLength - maxOnes);
		}
	} else {
		if (maxOnes <= wYu * sideLength) {
			return ans + wYu * hYu * wN + maxOnes * hN;
		} else if (((maxOnes - wYu * sideLength) + hYu * wYu) <= sideLength
				* hYu) {
			return ans + wYu * sideLength * hN
					+ ((maxOnes - wYu * sideLength) + hYu * wYu) * wN;
		} else {
			return width * height - hN * wN
					* (sideLength * sideLength - maxOnes);
		}
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode第8场双周赛 的相关文章

  • 工业异常检测AnomalyGPT-Demo试跑

    写在前面 如果你有大的cpu和gpu可以使用 直接根据官方的安装说明就可以 如果没有 可以点进来试着看一下我个人的安装经验 一 试跑环境 NVIDIA4090显卡24g cpu内存33G 交换空间8g 操作系统ubuntu22 04 试跑过
  • 阿里巴巴大神发布的Java零基础笔记,实战教程多到手软,跪了

    前言 现值金九银十之际 是面试高峰季 很多学校开始校招 也是跳槽转行的最佳时机 根据数据显示 程序员是金九银十里最热门的行业 也是需求量最大的行业 但是程序员是个门槛低 但金字塔顶峰比较高的行业 意味着你的付出要比别人多才能拔尖 我们都知道
  • D - Loong and Takahashi (经典模拟绕圈)

    题目 https atcoder jp contests abc335 tasks abc335 d 思想 令 flag 0 1 2 3 分别代表四个方向右 下 左 上 然后判断下一步是否超过边界或者被填充过 如果是 就换方向 最后输出 代
  • 【一份老网工珍藏多年的网络配置笔记,很重要!】

    01 交换机 路由器的几种配置模式及模式转换 1 用户模式 登录到交换机 路由器 时会自动进入用户模式 提示符为 switchname gt 在该模式下只能够查看相关信息 对 IOS的运行不产生任何影响 2 特权模式 用户模式下 键入 en
  • 2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

    2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现 对于一些必须每天使用电脑工作的白领来说 电脑桌面有着非常特殊的意义 通常一些频繁使用或者比较重要的图标会一直保留在桌面上 但是随着时间的推移 桌面上的图标会越来越多
  • 电脑快速打开计算器的方法

    大家好 我是爱你三千遍斯塔克 我们平常在运算时 经常要要使用计算器 那么计算器有什么快速打开方法吗 这里有一些参考方法 可供大家进行参考 希望对大家有帮助 希望你喜欢我的内容 记得关注我哦 我会继续为大家带来更好的作 1 win R 打开运
  • 扬帆证券:跨年期控股权易主活跃 多元化助推因素值得关注

    岁末年初 A股实控权改变趋向生动 2023年底 天汽模 中天精装 电工合金 三湘形象等公司相继公告控制权改变事宜 2024年以来 ST大集等公司打开实控人改变之路 宝莫股份等公司的易主在年初快速落定 这些易主运作中 部分案例超出商场预期 以
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 【C++入门】C++ STL中string常用函数用法总结

    目录 前言 1 string使用 2 string的常见构造 3 string类对象的访问及遍历 迭代器遍历 访问 4 string类对象的容量操作 4 1 size和length 4 2 clear empty和capacity 4 3
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 有 无策略奖励 2 2 训练结果1
  • 蒙特卡洛在发电系统中的应用(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 网络安全(黑客)自学

    1 网络安全是什么 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 2 网络安全市场 一 是市场需求量高 二 则是发展相对成熟入门比较容易 3 所需要的
  • 矩阵基本操作2

    题目描述 问题描述 将方阵 n 行n列 n lt 100 置成下三角矩阵 主对角线右上角数字全部清零 输入格式 第一行输入n 接下来的n行每行n列 表示矩阵的数值 用空格隔开 输出格式 n行n列下三角矩阵 每个数字3个占位符 左对齐 输入样
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • windows 杀死占用端口的程序

    在Windows上 你可以使用以下命令来查找并杀死占用某个端口 如9200 的程序 打开命令提示符 Command Prompt 或者PowerShell 运行以下命令来查找占用9200端口的程序的进程ID PID netstat ano
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 5_机械臂运动学基础_矩阵

    上次说的向量空间是为矩阵服务的 1 学科回顾 从科技实践中来的数学问题无非分为两类 一类是线性问题 一类是非线性问题 线性问题是研究最久 理论最完善的 而非线性问题则可以在一定基础上转化为线性问题求解 线性变换 数域 F 上线性空间V中的变
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤

随机推荐

  • 转载:《七周成为数据分析师》

    百日计划第一周总结 1 计划 1 彻底结束之前预定暑假完成的天善学院课程 七周数据分析师 2 总结 七周数据分析师 2 完成情况 1 完成 七周成为数据分析师 任务 2 周总结与 七周数据分析师 一起完成 七周数据分析师 总结 第一周 数据
  • 【Python零基础入门篇 · 17】:模块、模块的使用、过滤执行代码写法、包的使用

    文章目录 模块 内置模块 第三方模块 自定义模块 模块的使用 import 模块名 导入自定义模块 from import 模块起别名 as 导入多模块 模块 模块 就是 py文件 里面定义了一些函数和变量 需要的时候就可以导入这些模块 执
  • 零基础Java详细的jdk的下载以及安装配置

    文章目录 一 下载jdk 二 配置jdk 三 查看配置是否成功 一 下载jdk 1 登录oracle官网 2 3 4 点进去往下拉 会有jdk新版本 接受许可协议 直接下载 zip压缩文档就行 也可以直接下载 exe安装版本 5 找到压缩包
  • FPGA实现VGA显示图片

    利用FPGA在带有VGA接口的液晶显示器上显示图片 电路原理图 端口说明 VGA R2 VGAB0的8个端口位VGA的RGB数据位 VGA HS为行同步信号 VGA VS为场同步信号 以分辨率为640x480为例 刷新速率为60Hz 每幅图
  • [Python学习] 专题六.局部变量、全局变量global、导入模块变量

    定义在函数内的变量有局部作用域 在一个模块中最高级别的变量有全局作用域 本文主要讲述全局变量 局部变量和导入模块变量的方法 参考 Python核心编程 第二版 一 局部变量 声明适用的程序的范围被称为了声明的作用域 在一个过程中 如果名字在
  • 基于芯科Ember SDK开发的ZigBee ota client验证固件时崩溃(Reset info: 0x0A (FLT)), SDK Bug导致!

    现象 ZigBee子设备新固件下载完成后 准备校验其合法性 代码运行至检验部分 MCU崩溃重启 日志如下 RECV ASCII gt Processing message len 33 profile 0104 cluster 0019 T
  • IOS presentViewController没办法全屏的问题

    需要弹出的视图控制器的属性设置为0即可 mImagePick modalPresentationStyle 0
  • sklearn包MLPClassifier的使用详解+例子

    MLPClassifier 参数说明 hidden layer sizes 元组形式 长度n layers 2 默认 100 第i元素表示第i个神经元的个数 activation identity logistic tanh relu 默认
  • Vue3中的pinia使用(收藏版)

    1 pinia介绍 个人网站 紫陌 笔记分享网 想寻找共同学习交流 共同成长的伙伴 请点击 前端学习交流群 pinia 是 Vue 的存储库 它允许您跨组件 页面共享状态 就是和vuex一样的实现数据共享 依据Pinia官方文档 Pinia
  • 【Python】Python 模式匹配与正则表达式

    Python 模式匹配与正则表达式 1 模式匹配与正则表达式 你可能熟悉文本查找 即按下Ctrl F 输入你要查找的词 正则表达式 更进一步 它们让你指定要查找的 模式 你也许不知道一家公司的准确电话号码 但如果你住在美国或加拿大 你就知道
  • 21,verilog之宏define介绍

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 宏define提供用一个相对简单的文字来表示一大段真正有意义的文字作用 换句话说 就是综合软件见到定义的宏 就用这个
  • uni-app页面点击tab左右滑动(swiper)

    uni app基于
  • 自动化测试工具——selenium 用前须知

    OK 经过上的过程 我相信你一定做出的相应的选择 如果你选择的是selenium 工具 那么接着往下阅读 首选你在开始selenium之前 需要花一到两个月时间去学一门语言 这里是根据没有语言基础的同学而定的 我推荐ruby python
  • swing重定向输出到jtextArea

    import java awt Font import java io IOException import java io OutputStream import java io PrintStream import javax swin
  • Android Studio 中模拟器无法打开,提示Error launching emulator

    一 遇到的问题 运行模拟器时 提示 Error launching emulator 二 解决方法 打开SDK Manager 点击取消Android Emulator 然后重新运行 会提示下载一些文件 按着操作即可 如果没问题就不需要取消
  • 深入解析String intern()

    在 JAVA 语言中有8中基本类型和一种比较特殊的类型String 这些类型为了使他们在运行过程中速度更快 更节省内存 都提供了一种常量池的概念 常量池就类似一个JAVA系统级别提供的缓存 8种基本类型的常量池都是系统协调的 String类
  • Python3.8安装tensorflow

    我现在的版本是3 8 8 64 bit 编辑器是Visual Studio Code 之前试过好多次都失败了 都是因为Python的版本和tensorflow版本的各种问题 后来下过anaconda 用不习惯 还是回来捯饬Visual St
  • onenote导入html文件,office js - OneNote Add in: Getting HTML content - Stack Overflow

    In the example code is provided to get RichText It is able to get the plain text content of the page but I cannot seem t
  • css之id选择器和class类选择器

    一 css基础 css定义 可以设置网页中的样式 外观 美化 css中文名字 级联样式表 层叠样式表 样式表 二 css基础语法 1 style标签写在title标签后面 2 选择器 属性名1 属性值1 属性名2 属性值2 color 代表
  • leetcode第8场双周赛

    这次双周赛有意外 第二第三题按照提示返回int 会报错 要返回List 第一题 给你一个字符串 S 返回只含 单一字母 的子串个数 示例 1 输入 aaaba 输出 8 解释 只含单一字母的子串分别是 aaa aa a b aaa 出现 1