- 博客(43)
- 收藏
- 关注
原创 15.三数之和
1. 枚举的三元组(a,b,c) ,满足a<=b<=c,保证了只有 (a,b,c) 这个顺序会被枚举到,而(b,a,c)、(c,b,a) 等等这些不会,这样就减少了重复。3.固定一个数,使用双指针分别寻找和为0的两外两个数据(当和小于0,说明需要增大数据来使和为0,left+1,否者需要减小数据,right-1)2. 需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法。1.由于需要求和为0的不重复的三数和,因此数据中有负数,也有正数(除非全0)
2023-05-10 16:50:14
126
原创 28.找出字符串中第一个匹配项的下标
易错点:字符串中每一个字符都可能成为与needle首字母匹配的字符,所以应该考虑haystack中每一个字符作为匹配的首字母(容易使用遍历字符串haystack,但是没有考虑每个字符成为匹配needle首字母的可能)方法二:暴力法(切片)
2023-05-10 11:49:18
155
原创 12.整数转罗马数字
4.num是由一个key组成还是由key和其他key数组成,则要看num % key 这个余数,将余数作为num,如果余数为0,表示只由一个key组成,否则由多个key组成。3.如果给的num能整除key,说明该key可以组成num(大于num的key,num//key == 0)1.将数字与罗马数字使用字典从大到小保存。2.从大到小的循环访问字典中的key。
2023-05-09 20:42:13
45
原创 500.键盘行
思想:通过strip()去除字符串中指定的字符,如果去除字符的字符串为空,表示该字符串中的所有字符都在指定去除字符串中。1. 暴力法:通过统计数量判断,同类数量与可迭代对象长度相等,则可迭代对象内的元素属同一类。2.2判断字符串中所有的字符是否都在相同的行(哈希表)2.1首先获取每个字符串首字母所在的行(哈希表)2.循环判断每个每个字符串中的字符是否在同一行。1.使用字符串来表示26个小写字母所在的行。2. 使用all()方法。
2023-05-04 11:15:00
56
原创 231.2的幂
思想:利用有符号数,最高位为2 ** 30,若n为2 ** 30 的约数,则n符合条件。思想:根据题目,相当于n的二进制中只有一个1,且n为正数时,符合条件。思想:利用n & (-n) == n时,n中只有一个1这个特性。方法二:位运算(技巧)
2023-04-24 17:27:17
41
原创 191.位1的个数
思想:由于给的n有32位,从n的低位开始,将n与1进行“与”运算(即从低位开始寻找n中的1,此处使用左移位运算符),如果相“与”的结果为1,表示n中含有1,将ret加上1,最后返回1总共的个数ret。思想:由于n & (n-1)获得的结果为n将最低位的1变成0,所以使用这个特性,当结果为0时,n中的1全部转换成了0,即能统计全部的1个数(这样就不需要将32位全部进行“与”运算,减少了运算时间)方法三:count()计数法。方法二:位运算的优化。
2023-04-24 16:34:30
39
原创 349.两个数组的交集
3.如果两个元素相等,如果是第一个相等的元素,则将该元素放入交集中,并将两指针都向右移动一位;如果不是第一个相等的元素,则需要判断该元素是否在交集中存在,不存在则加入,否则不加入,并将两指针都向右移动一位。2.使用index1和index2两个指针从0开始分别逐一访问nums1和nums2的数组元素,直到超出两个数组的范围。2.逐一访问较短数组s_nums元素,如果该元素存在于较长数组l_nums中,则将该元素放入交集数组中nums。4.如果其中一个元素小于另一个元素,则将指向较小元素的指针向右移动一位。
2023-04-21 18:21:49
52
原创 217.存在重复元素
思想:经过排序后,如果相邻两个数相同,则这个数组中至少有一个值出现了两次。思想:利用集合的元素唯一的特性,比较原数组长度和集合长度。
2023-04-21 11:20:25
47
原创 796.旋转字符串
思想:如果s与goal长度不相等,则再反转也不会相等,即返回False;如果长度相等,goal使s+s的子串,也返回True(发现的规律,技巧)2.遍历S,使用切片分别获取字符串的后部分和前部分,并将着两部分组成新字符串。4.知道全部反转,如果还与goal不相等的话,返回False。3.将新字符串与goal比较,相等的话,返回True。1.当S与goal一样时,返回True。
2023-04-18 20:45:56
49
原创 541.反转字符串 II
1.字符串转换成列表,使用列表反转函数reversed()1.将字符串转换成列表,方便后续使用列表的反转函数。2.循环访问列表元素,获取反转子序列的首索引。4.最后将反转后的字符串列表再转换成字符串。3.字符串列表中字符串的拼接join()2.间隔访问列表元素。
2023-04-17 12:01:19
58
原创 804.唯一摩尔斯密码
3.求集合的长度即为不同摩尔斯密码的个数(利用集合中的元素不能重复特性)1.将字符串列表转换成摩尔斯字符串列表。2.再将摩尔斯字符串列表转换成集合。
2023-04-17 10:35:22
52
原创 415.字符串相加
相加的结果:res = str((sum) % 10) + res。当两个字符串长度不相等,给短的字符串前端添加0之后再对位相加。和:sum = n1 + n2 +carry。思想:从字符串末尾开始往前相加,模拟加法。进位:sum // 10。方法一:模拟法,双指针。
2023-04-14 18:18:13
51
原创 389.找不同
思路:根据题目可知,字符串t中的字符比s多一个字符,第一种情况:该字符可能是s中已经存在的,第二种情况:该字符也有可能是s中不存在的(错误解法:统计s之后,直接判断t中的字符在s统计的数中为0的那个字符为需要找的字符,这里只考虑到了第一种情况)2.循环字符串t,将字符串t中每个字符的数量与统计的s的数量对立(此处使用减法相对快速)2.循环字符串t,将字符串t中每个字符的数量与统计的s的数量对立(此处使用减法相对快速)
2023-04-13 22:38:25
50
原创 387.字符串中的第一个唯一字符
2.遍历字符串,判断字符串中字符在字典中的个数,第一个出现个数为1的字符为寻找的字符,返回该字符的索引(2.遍历字符串,判断字符串中字符在字典中的个数,第一个出现个数为1的字符为寻找的字符,返回该字符的索引。2.遍历字符串,判断字符串中字符在列表中的个数,第一个出现个数为1的字符为寻找的字符,返回该字符的索引。1. 统计字符串中各个字符的个数:使用字典统计。1. 统计字符串中各个字符的个数:使用字典统计。1.统计字符串中各个字符的个数:使用列表统计。
2023-04-13 20:25:44
47
原创 125.验证回文字串
3.使用一个指向左侧和一个指向右侧的指针(初始指向首和尾),分别向中间移动判断两指针指向元素是否相等,只要有不相等的,则不是回文字符串,否则就是回文字符串。),将字母或者数字的字符与空字符串拼接,得到一个由全部小写字母组成的新字符串——(使用方法一的第三种写法)2.遍历字符串,将字母或者数字的字符与空字符串拼接,得到一个由全部小写字母组成的新字符串。3.利用切片方法判断字符串正反序是否相等,相等,则是回文字符串,否则,不是回文字符串。使用ord()将字符转换成十进制,再将十进制与ASCII码比较。
2023-03-29 09:04:33
79
原创 66.加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
2023-03-14 10:41:45
51
原创 26.删除有序数组中的重复项
使用一个指针fast循环比较数组相邻两个元素相等的情况,使用另一个指针slow存放新数组,最后返回新数组长度slow。该题需要将获取的数组元素覆盖原始数组。
2023-03-14 08:09:45
47
原创 1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。循环数组,判断当前获得的num是否在哈希表中有数与之和为target,如果没有,将当前的num存入哈希表中;如果有,则返回num的下标和哈希表中target - num的值(哈希表即python中的字典)外层循环数组固定两数之和的其中一个数,使用切片方法在剩余数组中寻找与该数和为target的数字。求两数之和,需要同时知道数组元素和元素下标(想到哈希表)
2023-03-11 19:08:40
55
原创 33.搜索旋转排序数组
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回-1。
2023-03-11 16:52:36
48
原创 4.寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的 中位数
2023-03-11 15:56:59
45
原创 209.长度最小的子数组
主要针对slow指针的循环,如果slow和fast之间的和大于等于目标值,将slow指针往前移动1位继续判断双指针之间的数据和,直到双指针之间的数据和小于目标值,结束内部循环,进入外部循环,重复以上操作。2.外层循环计算连续数组的和,内层循环进行当和大于等于目标值的操作,此处注意,连续数组的和4个满足条件,还要判断减去首个数字后,和是否满足条件,因此sum = sum - nums[slow]使用双循环,双指针slow、fast,外部循环整个数组,内部循环计算双指针之间的和。
2023-02-24 10:32:55
53
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人