算法通关村第三关白银挑战——元素奇偶移动专题

文章介绍了两种数组排序方法(按奇偶排序和改进后的轮转数组),以及区间处理(汇总和缺失区间查找)和字符串替换空格的两种方法。作者提供了自己的实现思路和改进点。
摘要由CSDN通过智能技术生成

按奇偶排序数组

直接法——使用一个临时数组,第一遍查找将所有偶数复制到新数组的前部分,第二遍查找并复制所有奇数到数组的后部分。

我的方法——写的好乱,梳理一下。

就是先找出数组的最后一个偶数,才这里开始奇偶交换。如果交换的是奇数和奇数,那就指针不动,继续交换,直到奇偶交换,再把指针挪动到下一个。

def sortArrayByParity(self, nums):
    q = 0
    end = 0
    n = len(nums)
    for i in range(n):
        if nums[i] % 2 == 0:
            end = i
    while q <= end and end >= 0:
        if nums[q] % 2 != 0:
            tmp = nums[q]
            nums[q] = nums[end]
            nums[end] = tmp
            end -= 1
            if nums[q] % 2 == 0:
                q += 1
        else:
            q += 1
    return nums

轮转数组专题

轮转数组

我的想法是新建一个一样的数组,然后一一放进去

需要改进

def rotate(self, nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: None Do not return anything, modify nums in-place instead.
    """
    n = len(nums)
    list1 = [nums[i] for i in range(n)]
    print(list1)
    slow = fast = 0
    fast = (fast + k) % n
    i = 0
    while fast < n:
        nums[fast] = list1[slow]
        slow += 1
        fast += 1
    while slow < n:
        nums[i] = list1[slow]
        i += 1
        slow += 1
    return nums

数组区间专题

汇总区间

自己写的代码需要整理一下,看看能不能缩减

老师的方法

map(函数,序列)会一次将序列中的值代入函数。

def summaryRanges(self, nums):
    n=len(nums)
    res=[]
    slow=fast=0
    while fast<n:
        if fast<n-1 and nums[fast+1] == nums[fast]+1:
            fast+=1
        else:
            res.append((nums[slow],nums[fast]))
            slow=fast+1
            fast=fast+1


    def p(x):
        slow,fast=x
        if slow==fast:
            return str(slow)
        else :
            return str(slow)+'->'+str(fast)
    #map(函数,序列)会一次将序列中的值代入函数。
    return list(map(p,res))

 拓展——寻找缺失的区间

想法就参照汇总区间,但是还需要看它给的指定区间。zifu

def findMissingRanges(self, nums, lower, upper):
    n = len(nums)
    res = []
    if n == 0:
        res.append([lower, upper])
        return res
    slow = fast = 0
    if nums[slow] > lower:
        res.append([lower, nums[slow] - 1])
    while fast < n:
        if fast < n - 1 and nums[fast + 1] != nums[fast] + 1:
            slow = fast
            fast += 1
            res.append([nums[slow] + 1, nums[fast] - 1])
        else:
            fast += 1

    if nums[fast - 1] < upper:
        res.append([nums[fast - 1] + 1, upper])

    return res

字符串替换空格问题

实现一个函数,将一个字符串中的每个空格替换成“%20”

方法一

def replaceSpace(self,s):
    res=[]
    for c in s:
        if c==" ":
            res.append("%20")
        else:
            res.append(c)
    #str.join(sequence)
    return "".join(res)

方法二

def replaceSpace(self,s):
    counter=s.count(' ')
    res=list(s)

    #list.extend(seq)
    res.extend([' ']*counter*2)

    left,right=len(s)-1,len(res)-1

    while left>=0:
        if res[left]!=' ':
            res[right]=res[left]
            right-=1
        else:
            res[right-2:right+1]='%20'
            right-=3
        left-=1
    return ''.join(res)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值