0
点赞
收藏
分享

微信扫一扫

剑指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)
        

 

举报

相关推荐

0 条评论