【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)

一、问题描述
题目描述
输入一个由N个大小写字母组成的字符串
按照ASCII码值从小到大进行排序
查找字符串中第K个最小ASCII码值的字母 (k >= 1)
输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0)
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果有重复字母则输出字母的最小位置索引
输入描述
第一行输入一个由大小写字母组成的字符串
第二行输入k,k必须大于0,k可以大于输入字符串的长度
输出描述
输出字符串中第K个最小ASCII码值的字母所在字符串的位置索引
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果第K个最小ASCII码值的字母存在重复,则输出该字母的最小位置索引
用例
用例 1
输入:
AbCdeFG
3
输出:
5
说明:
根据ASCII码值排序,第三个ASCII码值的字母为F
F在字符串中位置索引为5 (0为字符串的第一个字母位置索引)
用例 2
输入:
fAdDAkBbBq
4
输出:
6
说明:
根据ASCII码值排序前4个字母为AABB由于B重复则只取B的第一个最小位置索引6
而不是第二个B的位置索引8
题目解析
本题是简单的字符串操作题。
2023.05.20 补充了第二个用例
根据第二个用例来看,题目要找的第k个,不是去重+升序后的第k个,而只是排序后的第k个。
详细步骤
-
读取输入:
- 读取一个由大小写字母组成的字符串
s。 - 读取一个整数
k。
- 读取一个由大小写字母组成的字符串
-
创建字符索引映射:
- 创建一个字典
char_index,键为字符,值为该字符在字符串中的最小索引。 - 遍历字符串
s,记录每个字符的最小索引。
- 创建一个字典
-
排序字符:
- 将字符串
s中的字符按ASCII码值排序,得到排序后的字符列表sorted_chars。
- 将字符串
-
查找第K个字符:
- 如果
k大于字符串长度,取最大ASCII码值的字符。 - 否则,取排序后第
k个字符。
- 如果
-
输出结果:
- 输出该字符在字符串中的最小位置索引。
用例解释
用例 1
- 输入:
s = "AbCdeFG"k = 3
- 输出:
5
解释:
- 按ASCII码值排序后的字符列表:
['A', 'C', 'd', 'e', 'F', 'G', 'b'] - 第3个字符是
F,其在字符串中的位置索引为 5。
用例 2
- 输入:
s = "fAdDAkBbBq"k = 4
- 输出:
6
解释:
- 按ASCII码值排序后的字符列表:
['A', 'A', 'B', 'B', 'B', 'D', 'D', 'f', 'k', 'q'] - 第4个字符是
B,其在字符串中的最小位置索引为 6。
通过上述步骤,我们可以高效地求出第K个最小ASCII码值的字母在字符串中的位置索引。这种方法的时间复杂度为 O(n log n),其中 n 是字符串的长度。
二、JavaScript算法源码
以下是 JavaScript 代码的详细中文注释和逻辑讲解:
JavaScript 代码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline"); // 引入 readline 模块,用于读取控制台输入// 创建 readline 接口
const rl = readline.createInterface({input: process.stdin, // 输入流为标准输入output: process.stdout, // 输出流为标准输出
});// 存储输入行的数组
const lines = [];// 监听输入事件
rl.on("line", (line) => {lines.push(line); // 将每一行输入存入 lines 数组// 当输入行数为 2 时,表示输入完成if (lines.length === 2) {const [str, k] = lines; // 解构赋值,获取输入的两行数据// 调用算法函数并输出结果console.log(getKIndex(str, k));// 清空 lines 数组,以便处理下一组输入lines.length = 0;}
});// 算法函数:获取字符串中第 k 小的字符的索引
function getKIndex(str, k) {// 如果 k 大于字符串长度,则将 k 设置为字符串长度if (k > str.length) k = str.length;// 将字符串转换为数组,排序后获取第 k 小的字符const tar = [...str].sort()[k - 1];// 返回该字符在原字符串中的索引return str.indexOf(tar);
}
代码逻辑讲解
1. 输入处理
- 使用
readline模块读取控制台输入。 - 将每一行输入存入
lines数组。 - 当
lines数组的长度为 2 时,表示输入完成,开始处理数据。
2. 算法逻辑
- 函数
getKIndex:- 参数:
str:输入的字符串。k:表示需要查找的第k小的字符。
- 逻辑:
- 如果
k大于字符串长度,则将k设置为字符串长度(避免越界)。 - 将字符串转换为数组,并对数组进行排序。
- 获取排序后数组中第
k - 1个字符(因为数组索引从 0 开始)。 - 返回该字符在原字符串中的索引。
- 如果
- 参数:
3. 示例验证
示例 1:
- 输入:
hello 3 - 处理过程:
- 将字符串
"hello"转换为数组:['h', 'e', 'l', 'l', 'o']。 - 对数组排序:
['e', 'h', 'l', 'l', 'o']。 - 获取第 3 小的字符:
'l'。 - 返回
'l'在原字符串中的索引:2。
- 将字符串
- 输出:
2。
示例 2:
- 输入:
world 5 - 处理过程:
- 将字符串
"world"转换为数组:['w', 'o', 'r', 'l', 'd']。 - 对数组排序:
['d', 'l', 'o', 'r', 'w']。 - 获取第 5 小的字符:
'w'。 - 返回
'w'在原字符串中的索引:0。
- 将字符串
- 输出:
0。
总结
- 功能:在给定字符串
str和整数k的情况下,找到字符串中第k小的字符,并返回其索引。 - 核心逻辑:
- 将字符串转换为数组并排序。
- 获取排序后数组中第
k - 1个字符。 - 返回该字符在原字符串中的索引。
- 适用场景:需要查找字符串中第
k小的字符及其索引的场景。 - 注意事项:
- 如果
k大于字符串长度,则k会被设置为字符串长度。 - 时间复杂度为
O(n log n),其中n是字符串长度(排序操作的时间复杂度)。
- 如果
如果有其他问题,欢迎随时提问!
三、Java算法源码
以下是对代码的详细中文注释和讲解:
import java.util.Arrays; // 导入Arrays类,用于数组操作
import java.util.Scanner; // 导入Scanner类,用于从控制台读取输入public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in); // 创建Scanner对象,用于读取用户输入String str = sc.next(); // 读取用户输入的字符串int k = sc.nextInt(); // 读取用户输入的整数kSystem.out.println(getResult(str, k)); // 调用getResult方法并输出结果}public static int getResult(String str, int k) {char[] chars = str.toCharArray(); // 将字符串转换为字符数组Arrays.sort(chars); // 对字符数组进行排序,按字典序升序排列if (k > str.length()) k = str.length(); // 如果k大于字符串长度,则将k设置为字符串长度char tar = chars[k - 1]; // 获取排序后字符数组中的第k个字符(索引为k-1)return str.indexOf(tar); // 返回该字符在原字符串中的索引位置}
}
代码讲解:
-
导入类库:
import java.util.Arrays;:导入Arrays类,用于对数组进行排序等操作。import java.util.Scanner;:导入Scanner类,用于从控制台读取用户输入。
-
主方法
main:Scanner sc = new Scanner(System.in);:创建一个Scanner对象,用于读取用户输入。String str = sc.next();:读取用户输入的字符串。int k = sc.nextInt();:读取用户输入的整数k。System.out.println(getResult(str, k));:调用getResult方法,并将结果输出到控制台。
-
getResult方法:char[] chars = str.toCharArray();:将输入的字符串str转换为字符数组chars。Arrays.sort(chars);:对字符数组chars进行排序,排序后字符数组中的字符按字典序升序排列。if (k > str.length()) k = str.length();:如果输入的k大于字符串的长度,则将k设置为字符串的长度,防止数组越界。char tar = chars[k - 1];:获取排序后字符数组中的第k个字符(由于数组索引从0开始,所以是k-1)。return str.indexOf(tar);:返回该字符在原字符串str中的索引位置。
代码功能总结:
- 该程序的功能是:给定一个字符串和一个整数
k,程序会先对字符串中的字符进行排序,然后找到排序后的第k个字符,并返回该字符在原字符串中的索引位置。
示例:
假设输入字符串为"hello",k为3:
- 将字符串转换为字符数组:
['h', 'e', 'l', 'l', 'o']。 - 对字符数组进行排序:
['e', 'h', 'l', 'l', 'o']。 - 取第
3个字符(索引为2):'l'。 - 返回
'l'在原字符串"hello"中的索引位置:2。
因此,程序输出为2。
希望这个解释对您理解代码有所帮助!
四、Python算法源码
以下是对代码的详细中文注释和讲解:
# 输入获取
s = input() # 从控制台读取用户输入的字符串
k = int(input()) # 从控制台读取用户输入的整数k# 算法入口
def getResult(s, k):chars = list(s) # 将字符串s转换为字符列表chars.sort() # 对字符列表进行排序,按字典序升序排列if k > len(s): # 如果k大于字符串的长度k = len(s) # 将k设置为字符串的长度,防止越界tar = chars[k - 1] # 获取排序后字符列表中的第k个字符(索引为k-1)return s.index(tar) # 返回该字符在原字符串s中的索引位置# 调用算法
print(getResult(s, k)) # 调用getResult函数并输出结果
代码讲解:
-
输入获取:
s = input():从控制台读取用户输入的字符串,并赋值给变量s。k = int(input()):从控制台读取用户输入的整数,并赋值给变量k。
-
getResult函数:chars = list(s):将字符串s转换为字符列表chars。chars.sort():对字符列表chars进行排序,排序后字符列表中的字符按字典序升序排列。if k > len(s): k = len(s):如果输入的k大于字符串的长度,则将k设置为字符串的长度,防止索引越界。tar = chars[k - 1]:获取排序后字符列表中的第k个字符(由于列表索引从0开始,所以是k-1)。return s.index(tar):返回该字符在原字符串s中的索引位置。
-
调用算法:
print(getResult(s, k)):调用getResult函数,并将结果输出到控制台。
代码功能总结:
- 该程序的功能是:给定一个字符串和一个整数
k,程序会先对字符串中的字符进行排序,然后找到排序后的第k个字符,并返回该字符在原字符串中的索引位置。
示例:
假设输入字符串为"hello",k为3:
- 将字符串转换为字符列表:
['h', 'e', 'l', 'l', 'o']。 - 对字符列表进行排序:
['e', 'h', 'l', 'l', 'o']。 - 取第
3个字符(索引为2):'l'。 - 返回
'l'在原字符串"hello"中的索引位置:2。
因此,程序输出为2。
注意事项:
- 索引从0开始:
- Python中的列表索引从0开始,因此第
k个字符的索引是k-1。
- Python中的列表索引从0开始,因此第
- 越界处理:
- 如果
k大于字符串的长度,程序会将k设置为字符串的长度,避免索引越界。
- 如果
- 字符重复:
- 如果字符串中有重复字符,
s.index(tar)会返回第一个匹配字符的索引。
- 如果字符串中有重复字符,
希望这个解释对您理解代码有所帮助!
五、C/C++算法源码:
以下是 C语言代码 和 C++代码 的详细中文注释和讲解,并附上代码转换。
C语言代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_SIZE 10000 // 定义最大字符串长度// 比较函数,用于qsort排序
int cmp(const void* a, const void* b) {return (*(char*) a) - (*(char*) b); // 按字符的ASCII值升序排序
}int main() {char s[MAX_SIZE]; // 定义字符数组,用于存储输入的字符串gets(s); // 从控制台读取字符串(注意:gets不安全,建议使用fgets)int k;scanf("%d", &k); // 从控制台读取整数kint n = strlen(s); // 获取字符串的长度char s_cp[n + 1]; // 定义字符数组,用于存储字符串的副本strcpy(s_cp, s); // 将原字符串复制到副本中qsort(s_cp, n, sizeof(char), cmp); // 对副本字符串进行排序if (k > n) { // 如果k大于字符串长度k = n; // 将k设置为字符串长度,防止越界}char target = s_cp[k - 1]; // 获取排序后字符串的第k个字符(索引为k-1)printf("%lld\n", strchr(s, target) - s); // 输出目标字符在原字符串中的索引return 0;
}
C语言代码讲解:
-
头文件:
#include <stdio.h>:标准输入输出库,用于printf和scanf。#include <stdlib.h>:标准库,用于qsort。#include <string.h>:字符串处理库,用于strlen和strcpy。
-
宏定义:
#define MAX_SIZE 10000:定义最大字符串长度为10000。
-
比较函数
cmp:- 用于
qsort排序,按字符的ASCII值升序排列。
- 用于
-
主函数
main:char s[MAX_SIZE];:定义字符数组,用于存储输入的字符串。gets(s);:从控制台读取字符串(注意:gets不安全,建议使用fgets)。scanf("%d", &k);:从控制台读取整数k。int n = strlen(s);:获取字符串的长度。char s_cp[n + 1];:定义字符数组,用于存储字符串的副本。strcpy(s_cp, s);:将原字符串复制到副本中。qsort(s_cp, n, sizeof(char), cmp);:对副本字符串进行排序。if (k > n) { k = n; }:如果k大于字符串长度,将k设置为字符串长度。char target = s_cp[k - 1];:获取排序后字符串的第k个字符。printf("%lld\n", strchr(s, target) - s);:输出目标字符在原字符串中的索引。
C++代码
#include <iostream>
#include <algorithm> // 包含sort函数
#include <cstring> // 包含strlen和strchr函数using namespace std;int main() {char s[10000]; // 定义字符数组,用于存储输入的字符串cin.getline(s, 10000); // 从控制台读取字符串(安全的方式)int k;cin >> k; // 从控制台读取整数kint n = strlen(s); // 获取字符串的长度char s_cp[n + 1]; // 定义字符数组,用于存储字符串的副本strcpy(s_cp, s); // 将原字符串复制到副本中sort(s_cp, s_cp + n); // 对副本字符串进行排序if (k > n) { // 如果k大于字符串长度k = n; // 将k设置为字符串长度,防止越界}char target = s_cp[k - 1]; // 获取排序后字符串的第k个字符(索引为k-1)cout << (strchr(s, target) - s) << endl; // 输出目标字符在原字符串中的索引return 0;
}
C++代码讲解:
-
头文件:
#include <iostream>:输入输出流库,用于cin和cout。#include <algorithm>:算法库,用于sort函数。#include <cstring>:C风格字符串处理库,用于strlen和strchr。
-
主函数
main:char s[10000];:定义字符数组,用于存储输入的字符串。cin.getline(s, 10000);:从控制台读取字符串(安全的方式)。cin >> k;:从控制台读取整数k。int n = strlen(s);:获取字符串的长度。char s_cp[n + 1];:定义字符数组,用于存储字符串的副本。strcpy(s_cp, s);:将原字符串复制到副本中。sort(s_cp, s_cp + n);:对副本字符串进行排序。if (k > n) { k = n; }:如果k大于字符串长度,将k设置为字符串长度。char target = s_cp[k - 1];:获取排序后字符串的第k个字符。cout << (strchr(s, target) - s) << endl;:输出目标字符在原字符串中的索引。
代码功能总结:
- 该程序的功能是:给定一个字符串和一个整数
k,程序会先对字符串中的字符进行排序,然后找到排序后的第k个字符,并返回该字符在原字符串中的索引位置。
示例:
假设输入字符串为"hello",k为3:
- 将字符串转换为字符数组:
['h', 'e', 'l', 'l', 'o']。 - 对字符数组进行排序:
['e', 'h', 'l', 'l', 'o']。 - 取第
3个字符(索引为2):'l'。 - 返回
'l'在原字符串"hello"中的索引位置:2。
因此,程序输出为2。
注意事项:
- C语言中的
gets不安全:- 建议使用
fgets替代gets,例如:fgets(s, MAX_SIZE, stdin);。
- 建议使用
- C++中的
cin.getline:- 是安全的输入方式,可以避免缓冲区溢出。
- 字符重复:
- 如果字符串中有重复字符,
strchr会返回第一个匹配字符的索引。
- 如果字符串中有重复字符,
希望这个解释对您理解代码有所帮助!
相关文章:
【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)
一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...
iOS - runtime总结
详细总结一下 Runtime 的核心内容: 1. 消息发送机制 // 消息发送的基本流程 id objc_msgSend(id self, SEL _cmd, ...) {// 1. 获取 isaClass cls object_getClass(self);// 2. 查找缓存IMP imp cache_getImp(cls, _cmd);if (imp) return imp(self, _cmd, ...);…...
第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题
思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。 在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog&…...
Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】
挑战:捕获大型水生哺乳动物(如鲸鱼)的数据,搭建全彩3D模型,用于水生野生动物的法医鉴定、研究和保护工作。 解决方案:Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...
PythonQT5打包exe线程使用
打包: pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改:test.spec 一般项目里面需要用的资源文件,比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...
【Powershell】Windows大法powershell好(二)
PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...
前端学习-环境this对象以及回调函数(二十七)
目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...
Element-plus、Element-ui之Tree 树形控件回显Bug问题。
需求:提交时,需要把选中状态和半选中状态 的数据id提交。如图所示: 数据回显时,会出现代码如下: <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …...
互联网全景消息(10)之Kafka深度剖析(中)
一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…...
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…...
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x y 代码代码 1:torch.matmul(x, y)输入张量:计算逻辑:输出结果: 代码 2:y y.view(4,1)…...
PyTorch环境配置常见报错的解决办法
目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook,new的时候有对应的环境,并且可以跑通所有的import code。 第一步:…...
罗永浩再创业,这次盯上了 AI?
罗永浩,1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭,是一名朝鲜族人;早年在新东方授课,2004年当选 “网络十大红人” ;2006年8月1日,罗永浩创办牛博网;2008年5月,罗永浩注册…...
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
机械燃油车知识图谱、知识大纲、知识结构(持续更新...)
一、发动机 曲柄连杆机构 配气机构 点火系统 起动系统 燃油供给系统 润滑系统 冷却系统 二、底盘 (一)传动系统 1、离合器 2、变速器 3、万向传动装置 4、驱动桥 (二)行驶系统 1、车架 2、车桥 3、悬架 4、车轮 &a…...
Vue3学习总结
一、Vue 3 基础搭建与核心语法 1.创建 Vue 3 应用 在项目的入口文件 main.js 中,通过以下代码创建 Vue 3 应用实例: import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app); 这几行代码的作用是引入…...
Type-C双屏显示器方案
在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...
【读书与思考】焦虑与内耗
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 今天一个朋友和我说,最近比较焦虑和内耗,无心工作和学习,我问他你焦虑内耗的时候,时间主要花在哪了,他告诉我说主要花在看有关移…...
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
