这里写目录标题
- 一、非自身以外数字的乘积
- 二、最大数
- 三、奇数排序
一、非自身以外数字的乘积
给你一个整数数组 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)