2020.9.5虾皮机器学习岗笔试复盘

选择题

考察计算机基础知识
算法与数据结构:排序算法
数据库:索引
操作系统:死锁
计算机网络:应用层协议

编程题

转驼峰命名

上一个排列

给定一个正整数,范围可能超过64位整数范围,位数不超过1000,将其组成数字重新排列,求比其小的最大整数?如果结果位数与其不一致,或者不存在,则返回0。

  • 输入描述
    整数n
  • 输出描述
    比n小的最大整数
  • 示例
    10
    0
    3798322211
    3798322121
    解释:case1,重新排列后的最大整数为1,与10位数不一致,故返回0。

类似题下一个排列,时间复杂度为 O ( N ) O(N) O(N)

line = input().strip()
line = [val for val in line]
# 从右向左找到拐点
for i in range(len(line)-2, -1, -1):
    if int(line[i]) > int(line[i+1]):
        break
if i >= 0:
    # 从右向左找到比拐点值小的最大数字,并交换位置
    for j in range(len(line)-1, i, -1):
        if int(line[i]) > int(line[j]):
            line[i], line[j] = line[j], line[i]
            break
    # 拐点后逆序,变成降序排列
    left, right = i+1, len(line)-1
    while left < right:
        line[left], line[right] = line[right], line[left]
        left += 1
        right -= 1
    res = "".join(line)
    if res[0] == '0':
        print(0)
    else:
        print(res)
else:
    print(0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值