
数组基础
Andy_Xie007
这个作者很懒,什么都没留下…
展开
-
【数组基础】Leetcode 242.有效的字母异位词
用哈希表分别记录两个字符串对应字母出现次数即可。构建哈希表需要注意以下几点:1.c++字符串处理:两个单字符相减相当于计算它们的ASCLL码差值比如说输出:2;2.c++字符串可以看作字符串数组,可以直接用下标输出任意位置字母;比如说输出:l3.bool变量只有0和1两种值。如果对bool值为0的变量-1,那么会得到1;同理,对bool值为0的变量+1, 那么会得到0,并不会报错。原创 2023-11-15 14:40:14 · 300 阅读 · 1 评论 -
【数组基础】Leetcode 202. 快乐数
按照题目描述,如果一个数是快乐数那么很好办,因为不管怎样,经过有限次运算都能得到答案,但是如果该数不是快乐数,那么看起来似乎没有办法自证,因为永远也算不到无限;但是这样的推论忽略了一个条件:快乐数本身的范围是有限的。, 即一个11位数,那么也就是说任何输入最多只有10位,即使这10位都是9,那么通过位数分别平方再求和的运算方法,经过有限次运算后,得到的中间变量x一定满足。根据抽屉原理,在此之后,最多计算810次,就能得到重复的数。而如果出现重复的数且周期里面没有1,那么该数就不是快乐数。原创 2023-11-17 12:30:00 · 497 阅读 · 0 评论 -
【数组基础】Leetcode 287. 寻找重复数
由于题设数组每个下标都与值对应,如果通过指针下标访问该地址数值,再将这个地址作为下一次访问的数组下标,那么一定能够遍历完整个数组。而如果此时重置sptr为0,继续循环,则当sptr在入口时,sptr = t,fptr = kn(注意这一次循环fptr步长和sptr保持一致),刚好也在入口。快指针先进入环,慢指针后进入,且两指针一定相遇。两指针相遇时,它们在环上位置是一样的,那么两个指针之间的路程差就只能是k个环的长度。,那么只需要让fast再走t,就能fast在环内位置为y=kn,即到达入口。原创 2023-11-08 00:40:52 · 220 阅读 · 1 评论 -
【数组基础】Leetcode 59. 螺旋矩阵 II
没有什么捷径,就是顺时针循环遍历矩阵即可,注意n为奇数时需要额外定义正中心格子数值为n^2。注意依次遍历矩阵边长时应当“左开右闭”,遍历最大矩阵边长也只能遍历n-1个单位,此后分别遍历n-3,n-5...个单位。注意这里的二维数组vector需要手动分配内存,否则编译器会报错。另外,数组表示矩阵的顺序是先行后列。注释部分为本地调试运行用。原创 2023-11-04 23:54:38 · 189 阅读 · 1 评论 -
【数组基础】Leetcode 209.长度最小的子数组
第一个想法是在输入的时候顺便求一个前缀和,这样求任意区间的和的复杂度为O(n^2),由于答案在线性区间 [1,n] 中,还可以用二分法省去一些重复查找。这个方法比不做任何处理就遍历相加当然要好,但是这样的优化还不够,况且核心代码模式由于不需要手动输入,需要花费额外时间计算前缀和。在以上的代码里面,子列的首项是可以自由移动的。按照之前的遍历相加方法,需要两层循环,外层遍历首项位置,内层遍历末项位置,时间复杂度为O(n^2),如果运用滑动窗口,同时调整首项末项位置,只需要单层循环,时间复杂度为O(n)。原创 2023-11-03 00:43:10 · 169 阅读 · 0 评论