【leetcode】Python实现-27.移除元素

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

猜你喜欢

转载自blog.csdn.net/qq_34364995/article/details/80274162