27.移除元素
给定一个数组和一个值,在这个数组中原地移除指定值和返回移除后新的数组长度。
不要为其他数组分配额外空间,你必须使用 O(1) 的额外内存原地修改这个输入数组。
元素的顺序可以改变。超过返回的新的数组长度以外的数据无论是什么都没关系。
示例
给定 nums = [3,2,2,3],val = 3,
你的函数应该返回 长度 = 2,数组的前两个元素是 2。
我:不得了,这题十分钟就做好,零bug!!超越昨天一次性通过所有测试!!!
l = len(nums)
if l == 0:
return 0
i = 0
while i < l:
if nums[i] == val:
nums.pop(i)
l-=1
else:
i+=1
return len(nums)
总结:这一题和上一题都使用了,list.pop()方法,数组长度一直在发生变化。这个时候想要遍历数组的话,使用while比较合适,用for循环的话,遍历的索引值不方便控制其根据list长度变化而跟着变化。
比如:
l = [1,2,3,4]
for i in l:
print(i)
l.pop(1)
print(l)
以上代码块的运行结果为:
1#此时i访问的是l的第一个元素
2
[1, 3, 4]
3#此时i访问的是l的第二个元素
3
[1, 4]#下一步i应该访问l的第三个元素,但因为此时l只剩余两个元素,故运行结束
28实现strStr()
实现 strStr()。
返回蕴含在 haystack 中的 needle 的第一个字符的索引,如果 needle 不是 haystack 的一部分则返回 -1 。
示例
输入: haystack = “hello”, needle = “ll”
输出: 2输入: haystack = “aaaaa”, needle = “bba”
输出: -1
我:一次过。第一次感受到占了Python刷题的大便宜了,但是感觉不妥,还是应该正正经经从逻辑上写代码,不过三行代码是真的爽哈哈哈哈哈哈。
if needle not in haystack:
return -1
return haystack.find(needle)
别人:虽然还是用了切片,不过这个方法很直接粗暴。效率更高
l = len(needle)
for i in range(len(haystack)-l+1):
if haystack[i:i+l] == needle:
return i
return -1