LeetCodeDay03-数组基础

基础操作:

访问、查找、插入(append,insert)、删除(pop、remove)

 

66、加一(使用shi记录进位,如果最后一位有进位则append0)需要注意range的写法

class Solution:

    def plusOne(self, digits: List[int]) -> List[int]:

        n=len(digits)

        shi=1

        for i in range(n-1,-1,-1):

            shi+=digits[i]

            digits[i]=shi%10

            shi//=10

        if shi:

            return [shi]+digits

        else:

            return digits

 方法二、使用insert 当最高位为0时,插入1

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for idx in range(len(digits)-1, -1, -1):
            if digits[idx] != 9:
                digits[idx] += 1
                break
            else:
                digits[idx] = 0
        if digits[0] == 0:
            digits.insert(0, 1)
        return digits

724、寻找数组的中心下标(使用sum存需要比较的值,而不是每一次都重新相加)

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        n=len(nums)
        sumleft=0
        sumright=sum(nums)-nums[0]
        if sumleft==sumright:
            return 0
        for i in range(0,n-1):#i=0表示求0-0的和与2-n-1的和,i=n-1时无中心下标
            sumleft+=nums[i]
            sumright-=nums[i+1]
            if sumleft==sumright: 
                return i+1
        return -1

 189、轮转数组(一开始想依次移动数组中的数,但是数组大的时候会超时)

一、

class Solution:

    def rotate(self, nums: List[int], k: int) -> None:

        """

        Do not return anything, modify nums in-place instead.

        """

        n=len(nums)

        k=k%n

        for i in range(k):

            left=nums[n-1]

            cur=0

            for j in range(n):

                cur=nums[j]

                nums[j]=left

                left=cur

        return nums

二、出自题解(开一个新的数组、进阶要求空间复杂度O(1),这个不符合)

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        nums1 = nums.copy()
        for i in range(len(nums1)):
            nums[(i + k) % len(nums1)] = nums1[i]

 三、分别翻转数组

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        def reverse(i: int, j: int) -> None:
            while i < j:
                nums[i], nums[j] = nums[j], nums[i]
                i += 1
                j -= 1

        n = len(nums)
        k %= n  # 轮转 k 次等于轮转 k%n 次
        reverse(0, n - 1)
        reverse(0, k - 1)
        reverse(k, n - 1)

作者:灵茶山艾府
链接:https://leetcode.cn/problems/rotate-array/solutions/
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值