【算法】算法题-20231206

在这里插入图片描述

一、非自身以外数字的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

def test2(nums):
    n = len(nums)
    res = [0] * n
    k = 1
    for i in range(n):
        res[i] = k
        k = k * nums[i]

    k = 1
    for i in range(n - 1, -1, -1):
        res[i] = k * res[i]
        k = k * nums[i]
    return res


nums = [1, 2, 3, 4]
res = test2(nums)
print(res)

二、最大数

给定一个list 由一些非负整数组成 ,重新排列他们的顺序把他们组成一个最大的整数。
例子:
输入:
[30,1]
返回值:
“301”

import itertools

nums = [1, 201, 20, 9, 8]
s = list(map(str, nums))
print(s)
ordered = sorted(s, key=lambda x: x, reverse=True)
print(ordered)


def fn(nums):
    s = list(map(str, nums))  # [30,1] ——》 ['30', '1']
    ordered = sorted(s, key=lambda x: x, reverse=True)  # 根据首位排序

    # 首位相同的,进行二次排序
    for i in range(len(ordered) - 1):
        if ordered[i][0] == ordered[i + 1][0]:
            if int(ordered[i][-1]) < int(ordered[i + 1][-1]):
                ordered[i], ordered[i + 1] = ordered[i + 1], ordered[i]

    return int(''.join(ordered))


nums = [301, 302, 34]
print(fn(nums))

三、奇数排序

哈利波特获得了一个数字列表,他的任务是必须将奇数按升序排序,同时将偶数保留在原来的位置。魔法师们,快来帮帮他吧~

nums = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]


def test(nums):
    res1 = sorted([i for i in nums if i % 2 == 1])

    for index in range(len(nums)):
        if nums[index] % 2 != 0:
            nums[index] = res1[0]
            res1.pop(0)
    return nums


r = test(nums)
print(r)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/134814240