博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】1053. Previous Permutation With One Swap
阅读量:7169 次
发布时间:2019-06-29

本文共 1443 字,大约阅读时间需要 4 分钟。

题目如下:

Given an array A of positive integers (not necessarily distinct), return the lexicographically largest permutation that is smaller than A, that can be made with one swap (A swap exchanges the positions of two numbers A[i] and A[j]).  If it cannot be done, then return the same array.

 

Example 1:

Input: [3,2,1]Output: [3,1,2]Explanation: Swapping 2 and 1.

Example 2:

Input: [1,1,5]Output: [1,1,5]Explanation: This is already the smallest permutation.

Example 3:

Input: [1,9,4,6,7]Output: [1,7,4,6,9]Explanation: Swapping 9 and 7.

Example 4:

Input: [3,1,1,3]Output: [1,3,1,3]Explanation: Swapping 1 and 3.

 

Note:

  1. 1 <= A.length <= 10000
  2. 1 <= A[i] <= 10000

解题思路:要找出字典序小于自己的最大值,方法如下:从后往前遍历A,对于任意一个A[i],在[i+1,A.length]区间内找出比自己小的最大值,如果能找到这样的值,则这两个元素交换,交换之后的A即为字典序小于自己的最大值。怎么找出[i+1,A.length]区间内找出比自己小的最大值?可以把区间内所有的值存入有序的数组中,通过二分查找即可。

代码如下:

class Solution(object):    def prevPermOpt1(self, A):        """        :type A: List[int]        :rtype: List[int]        """        import bisect        dic = {}        val_list = []        for i in range(len(A)-1,-1,-1):            inx = bisect.bisect_left(val_list,A[i])            inx -= 1            if inx >= 0 and inx < len(val_list):                A[i], A[dic[val_list[inx]]] = A[dic[val_list[inx]]], A[i]                break            if A[i] not in dic:                bisect.insort_left(val_list,A[i])            dic[A[i]] = i        return A

 

转载于:https://www.cnblogs.com/seyjs/p/10929238.html

你可能感兴趣的文章
罗森伯格应邀主讲CDCC百家大讲堂38期
查看>>
How to Install Nextcloud 13 Server on Debian 9
查看>>
[深入理解文件系统之一] IO系统调用
查看>>
Java之implements
查看>>
【资料收集】林内域或者林间域之间的账户、计算机迁移
查看>>
更新windows SID工具,对于虚拟机复制很有用
查看>>
安装TOMCAT
查看>>
-bash: lsof: command not found 解决方法
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-2.1.2 设计原则实战
查看>>
大家技术探讨
查看>>
使用Myeclipse自带的xFire来实现WebService
查看>>
《UNIX环境高级编程》apue.h 头文件的问题
查看>>
系统分析师证书求挂靠,请联系qq 369681392
查看>>
ubuntu中root与user相互切换
查看>>
(转载)Http 请求处理流程
查看>>
GetVersion和GetVersionEx
查看>>
软工实践第一次作业
查看>>
php采集利器snoopy应用技巧
查看>>
我的友情链接
查看>>
安装虚拟机shell脚本
查看>>