leetcode-1053. 交换一次的先前排列
题目描述:
给你一个正整数的数组 A
(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i]
和 A[j]
的位置)后得到的、按字典序排列小于 A
的最大可能排列。
如果无法这么操作,就请返回原数组。
示例 1:
输入:[3,2,1]
输出:[3,1,2]
解释:
交换 2 和 1
示例 2:
输入:[1,1,5]
输出:[1,1,5]
解释:
这已经是最小排列
示例 3:
输入:[1,9,4,6,7]
输出:[1,7,4,6,9]
解释:
交换 9 和 7 思路:
对数组A(A.size()=n),从后往前遍历,找到第一个A[i]<A[i-1]的i(i>0,找不到说明没办法调整,返回A),然后在下标i到n-1的数中找到小于A[i-1]的最大值max,找到下标i到n-1数中第一个等于max的j,交换A[j]和A[i-1]. C++:
class Solution {
public:
vector<int> prevPermOpt1(vector<int>& A) {
if (A.size() == ) return A;
for (int i = A.size() - ; i > ; i--){
if (A[i] < A[i - ]){
int max = A[i];
for (int j = i; j < A.size(); j++){
if (A[j] < A[i - ] && max < A[j]) max = A[j];
}
for (int j = i; j < A.size(); j++){
if (A[j] == max){
A[j] = A[i - ];
A[i - ] = max;
return A;
}
}
}
}
return A;
}
};
python:
class Solution:
def prevPermOpt1(self, A: List[int]) -> List[int]:
if len(A)==1: return A
for i in range(len(A)-1,0,-1):
if A[i]<A[i-1]:
max=A[i]
for j in range(i,len(A)):
if A[j]<A[i-1] and max<A[j]:
max=A[j]
for j in range(i,len(A)):
if A[j]==max:
A[j]=A[i-1]
A[i-1]=max
return A
return A
C++运行时间152 ms,暂时超过90.57%的提交,目前最快的解法112ms,code:
class Solution {
public:
vector<int> prevPermOpt1(vector<int>& A) {
int length = A.size();
if(length <= ){
return A;
}
int flag = false;
int i = ;
int index = -;
while(i < length){
if(A[i] < A[i - ]){
index = i - ;
}
i++;
}
if(index != -){
int swapIndex = index + ;
int maxTemp = A[index + ];
for(int j = index + ; j < length; j++){
if(A[j] < A[index] && A[j] > maxTemp){
maxTemp = A[j];
swapIndex = j;
}
}
A[swapIndex] = A[index];
A[index] = maxTemp;
}
return A;
}
};
leetcode-1053. 交换一次的先前排列的更多相关文章
- SQL语句中IF的简单使用 - 关联leetcode 627.交换工资
MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 & ...
- LeetCode 31. Next Permutation (下一个排列)
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
转:http://www.cnblogs.com/felixfang/p/3705754.html 一.开篇 Permutation,排列问题.这篇博文以几道LeetCode的题目和引用剑指offer ...
- LeetCode(31): 下一个排列
Medium! 题目描述: (请仔细读题) 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列) ...
- #leetcode刷题之路31-下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列.如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列).必须原地修改,只允许使用额外常数空间. 以下 ...
- leetcode 31. Next Permutation (下一个排列,模拟,二分查找)
题目链接 31. Next Permutation 题意 给定一段排列,输出其升序相邻的下一段排列.比如[1,3,2]的下一段排列为[2,1,3]. 注意排列呈环形,即[3,2,1]的下一段排列为[1 ...
- 【LeetCode】1409. 查询带键的排列 Queries on a Permutation With Key
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟 日期 题目地址:https://leetcode ...
- LeetCode 笔记21 生成第k个排列
题目是这样的: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all ...
- 【LeetCode每天一题】Permutation Sequence(排列序列)
The set [1,2,3,...,n] contains a total of n! unique permutations.By listing and labeling all of the ...
随机推荐
- HSQL基本使用(linux),安装+Demo
文章目录 下载 安装 运行 使用数据库 demo 注意 下载 http://sourceforge.net/projects/hsqldb/files/ 安装 将下载的包,解压到任意目录即可 运行 通 ...
- for循环中执行setTimeout问题(任务队列的问题)
for(var i=0;i<8;i++){ setTimeout(function () { console.log(i) },0) } 输出了8次8,这跟js的执行顺序和作用域链有关. 规则: ...
- PAT_A1033#To Fill or Not to Fill
Source: PAT A1033 To Fill or Not to Fill (25 分) Description: With highways available, driving a car ...
- 破解Xshell6强制升级
一.背景今天打开xshell时,弹出提示,“要继续使用此程序,您必须应用最新的更新或使用新版本”(如下图) 这是让我强制升级啊,点了确定按钮却提示我已经是最新版了 反正点了半天xshell也没打开.后 ...
- oracle中hint 详解
Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...
- Apache Solr远程命令执行
简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http G ...
- webpack 集成 Typescript && Less
webpack 集成 Typescript && Less TypeScript是JavaScript的一个类型化的超集,可以编译成纯JavaScript,在本指南中,我们将学习如何将 ...
- 2018-8-10-win10-uwp-ping
title author date CreateTime categories win10 uwp ping lindexi 2018-08-10 19:17:19 +0800 2018-2-13 1 ...
- texi2dvi - 打印 Texinfo 文档
SYNOPSIS 总览 texi2dvi [OPTION]... FILE... DESCRIPTION 描述 依次从 Tex 系统中运行每个 Texinfo 或者 LaTex 文件 FILE,直到解 ...
- 升级ssh后续问题
升级了openssh后远端的服务器无法通过sftp传输文件到高服务器,后来发现是远端的服务器ssh版本太低,而新升级了openssh的服务器已经不再支持老版本ssh client的相关协议,这时候有两 ...