leetcode_5: 移除元素(27)、实现strstr() (28)、搜索插入位置(35)

1.移除元素(27)

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

思路:

双指针,此题跟26题删除排序数组的重复项类似。设定一个慢指针和一个快指针。当不相等的时候,赋值给慢指针且慢指针加1.

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        # cur = 0
        # while cur < len(nums):
        #     if nums[cur] == val:
        #         nums.pop(cur)
        #     else:
        #         cur += 1
        # return len(nums)
        l = 0                      #l作为慢指针,k作为快指针
        for k in range(len(nums)):
            if nums[k] != val:      
                nums[l] = nums[k]
                l += 1
        return l
        

巩固知识点:双指针可实现就地删除数组的元素

2.实现strstr()  (28)

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

思路1:内置函数 haystack.find(needle)

思路2:

1.利用for循环遍历0到len(hatstack)-len(needle)+1,这是考虑必须包含全部的needle

2.利用切片操作判断是否含有needle

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        for i in range(0, len(haystack)-len(needle) + 1):
            if haystack[i:i+len(needle)] == needle:
                return i
        return -1
        # return haystack.find(needle)

知识点:find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。str.find(str, beg=0, end=len(string))

3.搜索插入位置(35)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

思路1:利用数组是排序且不重复的,所以我们可以在for循环中判定大于或等于target的值的索引即为所求的索引。

如果并没有在数组里面,则属于最后一个。

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        for i in range(0, len(nums)):
            if nums[i] == target or nums[i] > target:
                return i
        return i+1

思路2:计算小于或则等于的数组的长度。

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        return len([arg for arg in nums if arg <target])

参考链接:

https://leetcode-cn.com/problems/search-insert-position/solution/pythonmei-you-yi-xing-jie-jue-bu-liao-de-wen-ti-by/

https://leetcode-cn.com/problems/implement-strstr/solution/ji-bai-999de-pythonfang-fa-by-blaoke/

https://leetcode-cn.com/problems/remove-element/solution/yi-chu-yuan-su-by-leetcode/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值