剑指OFFER DAY13

第 13 天

双指针 Two-pointer Tech  


剑指 Offer 21. 调整数组顺序使奇数位于偶

 

 left指针指向list开头,right指向list结尾,且left为偶数指针,right为奇数指针,遍历list若left指向偶数,left指向奇数,则交换两指针指向的数字,直到两指针相遇。

时间复杂度O(n), 空间复杂度O(1)。

class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
        n = len(nums)
        left = 0
        right = n-1
        while left<right:
            if nums[left]%2 != 0:
                left += 1
            elif nums[right]%2 != 1:
                right -= 1
            elif nums[left]%2 == 0 and nums[right]%2 == 1:
                nums[left],nums[right] = nums[right],nums[left]
                right -= 1
                left += 1

        return nums

剑指 Offer 57. 和为s的两个数字

这个题比较简单了,设置left和right一个开头一个结尾,两个数和大于target则right-1,两个数和小于target则left+1

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        i, j = 0, len(nums) - 1
        while i < j:
            s = nums[i] + nums[j]
            if s > target: j -= 1
            elif s < target: i += 1
            else: return nums[i], nums[j]
        return []


 剑指 Offer 58 - I. 翻转单词顺序

 

 先贴上我的代码再总结代码里用到的知识点

class Solution:
    def reverseWords(self, s: str) -> str:
        s = re.sub(' +', ' ', s).strip().split()
        n = len(s)
        left = 0
        right = n-1
        while left<right:
            s[left],s[right] = s[right],s[left]
            left += 1
            right -= 1
        return ' '.join(s)
        

 首先是re.sub(' +', ' ', s)的用法,它的功能是将str中大于一个位的空格全部变成一个位的空格,str.strip()的用法是去除掉str两边的空格,split()是通过空格将str变成一个一个单词的list,因为python中list是可变数据结构,下面调换位置需要在可变数据结构上操作,而str是不可变数据结构,接下来就是左右指针调换位置了

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Weber77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值