关于网站建设意见和建议/上海专业的网络推广

关于网站建设意见和建议,上海专业的网络推广,深圳网络推广培训学校,跑纸活做网站专栏:算法的魔法世界 个人主页:手握风云 目录 一、模拟 二、例题讲解 2.1. 替换所有的问号 2.2. 提莫攻击 2.3. Z字形变换 2.4. 外观数列 2.5. 数青蛙 一、模拟 模拟算法说简单点就是照葫芦画瓢,现在草稿纸上模拟一遍算法过程&#xf…

专栏:算法的魔法世界

个人主页:手握风云

目录

一、模拟

二、例题讲解

2.1. 替换所有的问号

2.2. 提莫攻击

2.3. Z字形变换

2.4. 外观数列

2.5. 数青蛙


一、模拟

        模拟算法说简单点就是照葫芦画瓢,现在草稿纸上模拟一遍算法过程,再把算法过程转化为代码。

二、例题讲解

2.1. 替换所有的问号

        方法中所给的字符串s只含小写字母和问号,我们需要把这个问号转化为某个小写字母,得到一个连续重复字符的新字符串。

        我们先将字符串转化为字符数组,然后从前遍历这个字符数组。当遇到"?"时,从26个英文字母找到第一个既不等与它的前一位有不等于它的后一位的字符。当我们还需要注意一下边界情况,比如"?"在数组的第0位上,前一位不存在,只需要比较后面一位即可。

        完整代码实现:

class Solution {public String modifyString(String s) {char[] ch = s.toCharArray();int n = s.length();for (int i = 0; i < n; i++) {if(ch[i] == '?'){for(char c = 'a';c <= 'z';c++){if((i == 0 || c != ch[i - 1]) && (i == n - 1 || c != ch[i+1])){ch[i] = c;break;}}}}return String.valueOf(ch);}
}

2.2. 提莫攻击

        艾希受到提莫的攻击,会对艾希造成持续两秒的中毒效果,如果在中毒期间再次受到攻击,那么中毒时间还会重置,题目要求我们输出中毒的总时长。

        ·我们需要遍历一边数组,计算每两个相邻元素的差x,如果x大于等于中毒持续时间duration,则中毒时间ret加上duration;如果x小于duration,则ret直接加上x。但比较容易忽略的一点是数组的最后一个元素没有下一个元素,所以最后的返回值再要加上一个duration。

        完整代码实现:

class Solution {public int findPoisonedDuration(int[] timeSeries, int duration) {int ret = 0;for (int i = 1; i < timeSeries.length; i++) {int x = timeSeries[i] - timeSeries[i - 1];if(x >= duration) ret += duration;else ret += x;}return ret + duration;}
}

2.3. Z字形变换

        题目要求我们将给定的字符串变为倒Z排列,然后再以从左到右的顺序输出,得到一个新字符串。我们要想成功模拟出这个过程,需要借助一个矩阵来储存字符。我们以示例1为例,先创建一个n行的矩阵,先向下填充,当x=n时,开始右上填充,当x=0时,又开始向下填充……。假设字符串长度为len,因为我们记得遍历字符串又得遍历矩阵,所以时间复杂度和空间复杂度都为O(len*n)

        我们接下来可以通过找规律来对算法进行优化。如果矩阵里面填充的是字符的下标,那我们就可以发现规律了。第0行和第n-1行的数字正好构成了等差数列,且公差d为2n-2。接下来枚举第1行到第n-1行,1、5、9、13依然是构成了等差数列,3、7、11构成等差数列,(1,3)->(5,7)->(9,11)。

        完整代码:

class Solution {public String convert(String s, int numRows) {//处理一下边界情况if(numRows == 1) return s;int d = 2 * numRows - 2, n = s.length();StringBuilder ret = new StringBuilder();//1.处理第一行for (int i = 0; i < n; i += d)ret.append(s.charAt(i));//2.处理中间行for (int k = 1; k < numRows - 1; k++) {//一次枚举中间行for (int i = k, j = d - i; i < n || j < n; i += d, j += d) {if (i < n) ret.append(s.charAt(i));if (j < n) ret.append(s.charAt(j));}}//3.处理最后一行for (int i = numRows - 1; i < n; i += d) {ret.append(s.charAt(i));}return ret.toString();}
}

2.4. 外观数列

        本题的输出结果就是对第n-1的解释,当n=1时,字符串s="1";当n=2时,前一项是1个1,记为"11";当n=3时,前一项是2个1,记为"21";当n=4时,前一项时1个2和1个1,记为"1211"……规律就是对上一项连续相同的字符元素进行分类。

        我们可以利用双指针进行模拟。先初始化两个指针left和right,比较left和right是否相等,相等right就向右移动,当right的指向与left不相等时,right就停止,此时的left直接移动到right的位置。以此循环,直到right移动到字符串的结尾的后一位。前一类元素个数的计算right-1-left+1,作为对上一类元素的解释。

        完整代码实现:

class Solution {public String countAndSay(int n) {String ret = "1";//先初始化n=1时的字符串for (int i = 1; i < n; i++) {StringBuilder tmp = new StringBuilder();int len = ret.length();for (int left = 0,right = 0;right < len;){while(right < len && (ret.charAt(left) == ret.charAt(right))) right++;tmp.append(Integer.toString(right - left));tmp.append(ret.charAt(left));left = right;}ret = tmp.toString();}return ret;}
}

2.5. 数青蛙

        题目要求我们根据给定的字符串,计算出最少需要多少只青蛙才能完成鸣叫的过程。鸣叫的过程必须按照"croak"的顺序进行。比如"croakcroak",一只青蛙先叫完1声,还可以接着叫第2声;"crcoakroak","cr"后面是"c",就需要另一只青蛙开始叫。

        我们先从头到尾遍历一遍字符串,,比如我们遍历到a时,只需确定a的前面是不是r,所以我们还需要一个哈希表来记录每个字符出现的情况。当遍历到c时,哈希表中c加1;如果遍历到r时,检查前一个是不是c,如果是,则c--,r++。重复以上操作,

        如上图,k后面又是c,我们还需要给c记录上1,而我们要求的是所需不同青蛙的最少数目,所以我们从k里面借一个1,再去遍历最后一个"croak",最终k里面存的就是最终结果。当遍历完字符串之后,k前面还有非0元素,说明还有青蛙没有叫完,则返回-1。

        还有一种情况,如果给定的字符串是"crroak",遍历到第二个r时,哈希表中的c为0,直接返回-1。所以我们可以总结出:当r、o、a、k的前驱字符再哈希表时,前驱个数--,当前字符++,不存在直接返回-1;如果是c,找k是否存在于哈希表中,存在前驱个数--,当前字符++,不存在直接返回-1。

        完整代码实现:

class Solution {public int minNumberOfFrogs(String croakOfFrogs) {char[] croakOf = croakOfFrogs.toCharArray();String t = "croak";int n = t.length();int[] hash = new int[5];Map<Character,Integer> index = new HashMap<>();for (int i = 0; i < n; i++)index.put(t.charAt(i),i);for (char ch : croakOf) {if(ch == t.charAt(0)) {if(hash[n - 1] != 0) hash[n - 1]--;hash[0]++;}else {int i = index.get(ch);if (hash[i - 1] == 0) return -1;hash[i - 1]--;hash[i]++;}}for (int i = 0; i < n - 1; i++) {if(hash[i] != 0)return -1;}return hash[n - 1];}
}

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

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

相关文章

A股复权计算_权息数据整理

目录 前置&#xff1a; 步骤&#xff1a; 1 以通达信为参照 2 从优矿获取所需数据 2.1 股票配股信息 2.2 股票分红信息 2.3 股票拆股信息 3 合并数据&#xff0c;制成权息数据表 权息数据截止20250329.7z 视频 前置&#xff1a; 1 本系列将以 “A股复权计算_” 开头…

学习笔记—数据结构—二叉树(链式)

目录 二叉树&#xff08;链式&#xff09; 概念 结构 初始化 遍历 前序遍历 中序遍历 后序遍历 层序遍历 结点个数 叶子结点个数 第k层结点个数 深度/高度 查找值为x的结点 销毁 判断是否为完整二叉树 总结 头文件Tree.h Tree.c 测试文件test.c 补充文件Qu…

Open GL ES ->GLSurfaceView在正交投影下的图片旋转、缩放、位移

XML文件 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:o…

滤波---卡尔曼滤波

卡尔曼滤波概览 一、定义 卡尔曼滤波是一种基于线性系统和高斯噪声假设的递归最优状态估计算法。其核心目标是通过融合系统模型预测值与传感器测量值&#xff0c;在噪声环境中实时估计系统的动态状态&#xff08;如位置、速度、加速度等&#xff09;。 数学基础&#xff1a; …

23种设计模式-结构型模式-桥接器

文章目录 简介问题解决方案示例总结 简介 桥接器是一种结构型设计模式&#xff0c;可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c;从而能在开发时分别使用。 问题 假如你有一个几何形状Shape类&#xff0c;它有两个子类&#xff1a;圆形C…

手工排查后门木马的常用姿势

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 1. 检查异常文件 &#xff08;1&#xff09;查找最近修改的文件 # 查…

工业机器人核心算法体系解析:从感知到决策的技术演进

工业机器人作为智能制造的核心装备,其技术竞争力的本质是算法体系的优化与创新。从静态轨迹执行到动态环境适应,从单一任务控制到复杂场景决策,工业机器人的算法体系涵盖环境感知、运动控制、路径规划、行为决策四大核心模块。本文将深入解析各模块的关键算法及其技术演进,…

当 EcuBus-Pro + UTA0401 遇上 NSUC1500

文章目录 1.前言2.EcuBus-Pro简介2.1 官方地址2.2 概览 3.纳芯微NSUC1500简介3.1 NSUC1500概述3.2 产品特性 4.测试环境5.基础功能5.1 数据发送5.2 数据监控 6.自动化功能6.1 脚本创建6.2 脚本编辑6.3 脚本编辑与测试 7.音乐律动7.1 导入例程7.2 效果展示 ECB工程 1.前言 最近…

说说Redis的内存淘汰策略?

大家好&#xff0c;我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助&#xff1b; 说说Redis的内存淘汰策略? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis的内存淘汰策略用于管理当内存达到最大限制时&#xff0c;如何处理过…

Altium Designer 24 PCB 走线倒圆弧方法

Altium Designer 24 PCB 走线倒圆弧方法 问题描述解决方法设置倒圆弧参数选择需要优化的走线进行走线优化 优化效果展示 在 PCB 设计中&#xff0c;走线转角过于尖锐不仅影响美观&#xff0c;还可能引起信号完整性问题。本文介绍如何在 Altium Designer 24 中通过倒圆弧优化走线…

Cookie与Token详解及测试需重点关注点

在现代Web应用中&#xff0c;Cookie 和 Token 是两种常见的身份验证与会话管理机制。它们分别在不同的场景下扮演着重要的角色&#xff0c;在性能、灵活性和安全性方面具有各自的特点。作为测试人员&#xff0c;理解它们的工作原理以及如何对其进行有效的测试&#xff0c;是保证…

Redis - 概述

目录 ​编辑 一、什么是redis 二、redis能做什么&#xff08;有什么特点&#xff09;&#xff1f; 三、redis有什么优势 四、Redis与其他key-value存储有什么不同 五、Redis命令 六、Redis数据结构 1、基础数据结构 2、高级数据结构 一、什么是redis 1、redis&#x…

图灵完备——游戏中进行实践

图灵完备 简述结构一、基本逻辑电路1、低电平2、高电平3、非门4、与门5、三路与门6、或门7、三路或门8、与非门9、或非门10、异或门11、同或门 二、算数运算&&存储器1、二进制速算2、成对的麻烦 简述 这周就要学习计算机组成原理了&#xff0c;为了学起来不那么吃力&am…

AI小白的第七天:必要的数学知识(概率)

概率 Probability 1. 概率的定义 概率是一个介于 0 和 1 之间的数&#xff0c;表示某个事件发生的可能性&#xff1a; 0&#xff1a;事件不可能发生。1&#xff1a;事件必然发生。0 到 1 之间&#xff1a;事件发生的可能性大小。 例如&#xff0c;掷一枚公平的硬币&#xf…

UE5 + Rider + VsCode 接入腾讯的 Puerts 脚本

学习了一段时间 U&#xff0c;写点啥就得等编译&#xff0c;体验真的是一言难尽。。。。。。 然后就想着给自己找个脚本好了&#xff0c;调研了一下 AngelScript&#xff0c;puerts 的可行性。 AngelScript 看着真的诱人&#xff0c;但是发现连官方提供的都是 UE 的预编译版本…

凸包构造算法—Graham 扫描法

1. 理论原理推导 核心思想 Graham 扫描法基于以下基本思想&#xff1a; 极角排序&#xff1a; 选取一个参考点&#xff08;通常选择 y 坐标最小的点&#xff0c;若存在多个&#xff0c;则选 x 坐标最小的&#xff09;&#xff0c;将其他点按照与该参考点构成的极角进行升序排…

如何在 Windows 上安装与配置 Tomcat

Apache Tomcat 是一个开源的 Servlet 容器和 Web 服务器&#xff0c;广泛用于 Java Web 应用的开发和部署。它是实现 Java EE&#xff08;现称 Jakarta EE&#xff09;规范中的 Servlet 和 JSP 的官方参考实现。在本文中&#xff0c;我们将详细介绍如何在 Windows 系统上安装并…

测试模版15

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…

计算机视觉算法实战——烟雾检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 烟雾检测领域介绍 烟雾检测是计算机视觉在公共安全领域的重要应用&#xff0c;它通过分析视频或图像序…

MySQL-DCL函数

DCL DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 管理用户 1). 查询用户 use mysql; select * from user; select * from mysql.user; 查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅…