广西梧州市住房和城乡建设局网站什么是crm系统

张小明 2026/1/9 8:07:03
广西梧州市住房和城乡建设局网站,什么是crm系统,wordpress调用大类下的分类列表,wordpress 多条件筛选字符的最短距离 问题描述 给你一个字符串 s 和一个字符 c#xff0c;其中 c 在 s 中至少出现一次。 返回一个整数数组 answer#xff0c;其中 answer[i] 是字符串 s 中下标 i 处的字符到最近的字符 c 的最短距离。 两个下标 i 和 j 之间的距离为 abs(i - j)。 示例…字符的最短距离问题描述给你一个字符串s和一个字符c其中c在s中至少出现一次。返回一个整数数组answer其中answer[i]是字符串s中下标i处的字符到最近的字符c的最短距离。两个下标i和j之间的距离为abs(i - j)。示例输入: s loveleetcode, c e 输出: [3,2,1,0,1,0,0,1,2,2,1,0] 解释: 字符 e 在下标 3、5、6、11 处出现。 对于下标 0最近的 e 在下标 3距离为 |0-3| 3。 对于下标 1最近的 e 在下标 3距离为 |1-3| 2。 ...算法思路核心最近距离对于任意位置 i最近的字符 c 要么在 i 的左边要么在 i 的右边两次遍历第一次从左到右记录每个位置到左边最近 c 的距离第二次从右到左记录每个位置到右边最近 c 的距离取两次遍历结果的最小值方法两次遍历时间复杂度 O(n)空间复杂度 O(1)预处理位置先找到所有 c 的位置然后对每个位置二分查找最近的 c暴力对每个位置遍历整个字符串找最近的 c效率低代码实现方法一两次遍历classSolution{/** * 使用两次遍历计算每个字符到最近目标字符的最短距离 * * param s 输入字符串 * param c 目标字符 * return 每个位置到最近c的最短距离数组 */publicint[]shortestToChar(Strings,charc){intns.length();int[]resultnewint[n];// 初始化为一个很大的值大于可能的最大距离// 最大距离不会超过n所以用n作为初始值for(inti0;in;i){result[i]n;}// 第一次遍历从左到右计算到左边最近c的距离intprev-n;// 记录上一个c的位置初始化为-n确保第一次更新for(inti0;in;i){if(s.charAt(i)c){previ;}result[i]Math.min(result[i],i-prev);}// 第二次遍历从右到左计算到右边最近c的距离prev2*n;// 记录下一个c的位置初始化为2*n确保第一次更新for(intin-1;i0;i--){if(s.charAt(i)c){previ;}result[i]Math.min(result[i],prev-i);}returnresult;}}方法二预处理位置 二分查找importjava.util.*;classSolution{/** * 先预处理所有目标字符的位置然后对每个位置二分查找最近的位置 */publicint[]shortestToChar(Strings,charc){// 预处理找到所有c的位置ListIntegerpositionsnewArrayList();for(inti0;is.length();i){if(s.charAt(i)c){positions.add(i);}}int[]resultnewint[s.length()];// 对每个位置找到最近的cfor(inti0;is.length();i){result[i]findMinDistance(positions,i);}returnresult;}/** * 在有序位置列表中找到距离target最近的位置 */privateintfindMinDistance(ListIntegerpositions,inttarget){// 二分查找插入位置intleft0,rightpositions.size();while(leftright){intmidleft(right-left)/2;if(positions.get(mid)target){leftmid1;}else{rightmid;}}intminDistInteger.MAX_VALUE;// 检查left位置第一个target的位置if(leftpositions.size()){minDistMath.min(minDist,positions.get(left)-target);}// 检查left-1位置最后一个target的位置if(left0){minDistMath.min(minDist,target-positions.get(left-1));}returnminDist;}}方法三暴力classSolution{/** * 暴力对每个位置遍历整个字符串 */publicint[]shortestToChar(Strings,charc){intns.length();int[]resultnewint[n];for(inti0;in;i){intminDistn;// 最大可能距离for(intj0;jn;j){if(s.charAt(j)c){minDistMath.min(minDist,Math.abs(i-j));}}result[i]minDist;}returnresult;}}算法分析时间复杂度两次遍历O(n) - 三次线性扫描初始化两次遍历预处理二分查找O(n log k) - k是字符c的出现次数暴力O(n²)空间复杂度两次遍历O(1) - 只使用常数额外空间预处理二分查找O(k) - 存储c的位置暴力O(1)算法过程1s “loveleetcode”, c “e”字符e的位置[3, 5, 6, 11]两次遍历第一次遍历左到右i0: prev-12, dist0-(-12)12i1: prev-12, dist13i2: prev-12, dist14i3: s[3]‘e’, prev3, dist0i4: prev3, dist1i5: s[5]‘e’, prev5, dist0i6: s[6]‘e’, prev6, dist0i7: prev6, dist1…继续到i11中间结果[12,13,14,0,1,0,0,1,2,3,4,0]第二次遍历右到左i11: s[11]‘e’, prev11, distmin(0, 0)0i10: prev11, distmin(4, 1)1i9: prev11, distmin(3, 2)2i8: prev11, distmin(2, 3)2i7: prev11, distmin(1, 4)1i6: s[6]‘e’, prev6, distmin(0, 0)0i5: s[5]‘e’, prev5, distmin(0, 0)0i4: prev5, distmin(1, 1)1i3: s[3]‘e’, prev3, distmin(0, 0)0i2: prev3, distmin(14, 1)1i1: prev3, distmin(13, 2)2i0: prev3, distmin(12, 3)3最终结果[3,2,1,0,1,0,0,1,2,2,1,0]测试用例publicstaticvoidmain(String[]args){SolutionsolutionnewSolution();// 测试用例1标准示例int[]result1solution.shortestToChar(loveleetcode,e);System.out.println(Test 1: Arrays.toString(result1));// [3,2,1,0,1,0,0,1,2,2,1,0]// 测试用例2目标字符在开头int[]result2solution.shortestToChar(aaab,b);System.out.println(Test 2: Arrays.toString(result2));// [3,2,1,0]// 测试用例3目标字符在结尾int[]result3solution.shortestToChar(baaa,b);System.out.println(Test 3: Arrays.toString(result3));// [0,1,2,3]// 测试用例4所有字符都是目标字符int[]result4solution.shortestToChar(eeee,e);System.out.println(Test 4: Arrays.toString(result4));// [0,0,0,0]// 测试用例5只有一个目标字符int[]result5solution.shortestToChar(abcdefg,d);System.out.println(Test 5: Arrays.toString(result5));// [3,2,1,0,1,2,3]// 测试用例6单字符字符串int[]result6solution.shortestToChar(a,a);System.out.println(Test 6: Arrays.toString(result6));// [0]// 测试用例7两个字符int[]result7solution.shortestToChar(ab,b);System.out.println(Test 7: Arrays.toString(result7));// [1,0]// 测试用例8目标字符多次出现int[]result8solution.shortestToChar(abccba,c);System.out.println(Test 8: Arrays.toString(result8));// [2,1,0,0,1,2]// 测试用例9长字符串int[]result9solution.shortestToChar(abcdefghijklmnopqrstuvwxyz,m);System.out.println(Test 9: Arrays.toString(result9));// [12,11,10,9,8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7,8,9,10,11,12,13]// 测试用例10目标字符在中间int[]result10solution.shortestToChar(abcde,c);System.out.println(Test 10: Arrays.toString(result10));// [2,1,0,1,2]}关键点两次遍历单次遍历无法同时考虑左右两边的最近字符两次遍历分别处理左边界和右边界情况初始化使用足够大的初始值确保正确更新避免使用Integer.MAX_VALUE防止溢出距离计算左到右i - prevprev ≤ i右到左prev - iprev ≥ i保证距离为正数边界处理字符串开头只有右边的字符可选字符串结尾只有左边的字符可选常见问题为什么不能用一次遍历一次遍历只能知道已遍历部分的信息无法预知右边是否有更近的字符
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

佛山知名网站建设公司优改网logo设计

Python应用封装解决方案:图形化打包工具深度解析 【免费下载链接】auto-py-to-exe Converts .py to .exe using a simple graphical interface 项目地址: https://gitcode.com/gh_mirrors/au/auto-py-to-exe 在Python开发领域,将脚本转换为独立可…

张小明 2026/1/7 6:37:44 网站建设

东阳便宜营销型网站建设二手房网站开发

ElasticJob云原生部署终极指南:分布式任务调度的完整解决方案 【免费下载链接】shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob 在当今云原生技术快速发展的背景下,如何将分布式任务调度框…

张小明 2026/1/7 7:03:47 网站建设

网站下载视频方法做企业的网站都要准备什么东西

如何在Vivado中正确导入外部VHDL文件?一文讲透工程集成全流程你有没有遇到过这种情况:辛辛苦苦写好的VHDL模块,复制到Vivado工程里却“看不见”?综合时报错“Entity not found”,仿真时信号全红,折腾半天才…

张小明 2026/1/7 7:44:06 网站建设

景观设计师做交通分析常用网站网页设计与制作教程 pdf

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/7 6:44:03 网站建设

网站怎么添加后台设计之家室内设计

PouchDB 同步协议:如何在离线优先应用中实现多端数据最终一致性 大家好,今天我们来深入探讨一个非常实用且重要的技术主题:如何使用 PouchDB 实现多端数据的最终一致性,尤其是在“离线优先”(Offline-First)的应用场景下。 一、什么是“离线优先”?为什么它重要? 在现…

张小明 2026/1/7 5:16:23 网站建设

郑州微信网站建设高德地图搜索不到国外

注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。连接池有很多种,这里介绍的是数据库连接池一、连接池是什么?维持管理一定数量连接的池式结构维持:不断开连接管理:定时发送PING包给Mysq…

张小明 2026/1/8 12:26:49 网站建设