代码笔记-231225

134 阅读4分钟

[C++]

  1. 代码分析:vector cnt(26, 0);
    答:这行代码的含义是创建一个大小为 26 的整型向量 cnt,并且给每个元素赋初值 0。也就是说,cnt 向量有 26 个元素,每个元素初始值都是 0。

  2. vector什么意思?
    答:vector是C++标准库中的一个容器类模板。
    它可以用来创建动态数组,即长度可变的数组。 vector提供了方便的方法来管理数组的大小和元素的访问。与传统的静态数组不同,vector可以根据需要动态地增加或缩小其大小。 使用vector,我们可以在运行时添加、删除和访问元素,而不需要事先指定数组的大小或重新分配空间。 例如,vector<int>定义了一个存储整数的动态数组,而vector<char>定义了一个存储字符的动态数组,以此类推。

  3. char类型在内存中是以ASCII码形式存储的,每个字符对应一个唯一的ASCII码值。对于小写字母,它们的ASCII码是连续的,从 'a' 开始,依次递增。 因此,如果 char x = 'b',则 x - 'a' 的结果是 1。因为字符 'b' 的ASCII码值是 98,字符 'a' 的ASCII码值是 97,所以 98 - 97 等于 1


[Java]

  1. charAt(i) 是字符串类型的方法,用于获取指定索引位置上的字符。参数 i 表示要获取的字符所在的索引位置。

[js]

  1. 代码分析:const cnt = new Array(26).fill(0); 答:创建了一个名为 cnt 的数组,长度为 26,并将每个元素的初始值都设置为 0。

[Golang]

  1. 代码分析:cnt := [26]int{}
    答:创建了一个长度为 26 的整数数组 cnt,并将每个位置的元素初始化为 0。

  2. 代码分析:for i := 0; ; i++
    答:这个循环是一个无限循环,因为循环条件省略了。它使用变量 i 作为索引,从 0 开始递增。

  3. 代码分析 for _, ch := range s 代表循环遍历字符串 s 中的每个字符,并将每个字符赋值给变量 ch。在这里,使用 _ 忽略了每个字符的索引,只关注字符本身。


[Android]

  1. 使用Gradle下载包gradle-7.3.3-all.zip特别慢怎么办?
  • 使用国内镜像:https://mirrors.cloud.tencent.com/gradle/
    找到项目文件下的这个路径:~\android\gradle\wrapper\gradle-wrapper.properties 打开文件,替换掉如下位置的代码。(前提是腾讯镜像里面有的包) image.png

[算法]
1.KMP算法是什么?

KMP算法(Knuth-Morris-Pratt算法)是一种用于在字符串中寻找子串的高效算法。它的思想是利用已经匹配过的部分信息,避免在不必要的情况下进行重复的比较。 简单来说,KMP算法通过构建一个匹配表(也称为部分匹配表),根据已经匹配的部分信息,指导下一次的匹配过程。这个匹配表保存了在子串中,每个位置之前的子串中有多长的公共前后缀。 在进行匹配时,KMP算法遵循以下步骤:
a. 构建匹配表:根据子串本身的特性,计算每个位置之前的子串中的最长公共前后缀的长度,并存储在匹配表中。
b. 进行匹配:遍历主串和子串,当发现不匹配时,根据匹配表中的信息,调整子串的位置,而不是重新比较主串和子串的相同位置。这样可以避免无效的比较,提高匹配效率。 通过利用匹配表进行指导,KMP算法能够跳过一些明确不匹配的情况,以线性时间复杂度(O(m+n))进行字符串匹配,相比传统的暴力匹配算法(时间复杂度O(m*n)),KMP算法具有更高的效率。 总结起来,KMP算法通过预处理构建匹配表,利用已经匹配的部分信息来指导后续的匹配过程,以提高字符串匹配的效率。

  1. 动态规划?

就在于拆分子问题,记住过往,减少重复计算
举个例子

  • A : 1+1+1+1+1+1+1+1 =?
  • A : 上面等式的值是多少
  • B : 计算"8"
  • A : 在上面等式的左边写上"1+"呢?
  • A : 此时等式的值为多少
  • B : 很快得出答案"9"
  • A : 你怎么这么快就知道答案了
  • A : 只要在8的基础上加1就行
  • A : 所以你不用重新计算,因为你记住了第一个等式的值为8!动态规划算法也可以说是"记住求过的解来节省时间"