0
点赞
收藏
分享

微信扫一扫

初学python记录:力扣2009. 使数组连续的最少操作数

瑾谋 2024-04-09 阅读 12

50. Pow(x, n)

递归:
终止条件:x0 = 1,n=1
递归主体:x
n = x**(n//2) * x**(n//2) 在N为偶数时;奇数时需要单独拎出来一个x1,使得也能两个一半相乘
分解问题:每个x
n都可以表示为两个x**n的一半

class Solution:
    def myPow(self, x: float, n: int) -> float:

        # 递归函数
        def fast_pow(x,n):
            if n == 0:
                return 1

            half = fast_pow(x, n//2)
            # 偶数
            if n % 2 == 0:
                return half * half
            # 奇数
            else:
                return half * half * x

        # 区分n的正负
        if n < 0:
            x = 1/x
            n = -n
        # 正常计算
        return fast_pow(x,n)
        
        

169. 多数元素

示例代码:

def majorityElement(nums):
    count = 0
    candidate = None

    for num in nums:
        if count == 0:
            candidate = num
        count += (1 if num == candidate else -1)

    return candidate

53. 最大子数组和

一种是用辅助数组,走动态规划;另一种是迭代,因为当前最大和取决于上一个的。

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:  
        # 辅助数组
        dp = [0] * len(nums)
        dp[0] = nums[0]

        for i in range(1, len(nums)):
            if dp[i-1] >= 0:
                dp[i] = dp[i-1] + nums[i]
            else:
                dp[i] = nums[i]
        
        return max(dp)
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:  
        # 辅助数组
        temp_max = global_max = nums[0]

        for num in nums[1:]:
            temp_max = max(num, temp_max+num)
            global_max = max(global_max, temp_max)

        return global_max

0932. 漂亮数组

递归和分治算法。
[1]是一个最小的漂亮数组。
需要对其进行转换,等式 A[k] * 2 = A[i] + A[j] 的左侧是一个偶数,右侧的两个元素分别来自两个部分。要想等式恒不成立,一个简单的办法就是让 left 部分的数都是奇数,right 部分的数都是偶数。

所以对左边进行奇数序列映射,右边进行偶数序列映射。

class Solution:
    def beautifulArray(self, n: int) -> List[int]:
        # 递归终止:1就是最基本的漂亮数组
        if n == 1: return [1]
        # 左边的
        left = self.beautifulArray((n+1)//2)
        # 右边的
        right = self.beautifulArray(n//2)
        # 奇数序列,偶数序列
        return [2*x-1 for x in left] + [2*x for x in right]

        

241. 为运算表达式设计优先级

23. 合并 K 个升序链表

困难题根本不想做

举报

相关推荐

0 条评论