题目描述:

给你一个正整数数组 arr(可能存在重复的元素),请你返回可在 一次交换(交换两数字 arr[i] 和 arr[j] 的位置)后得到的、按字典序排列小于 arr 的最大排列。

如果无法这么操作,就请返回原数组。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/previous-permutation-with-one-swap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

采用贪心的策略,假设我们要换第i个元素,那么我们只需要找到第i个元素后面小于当前元素的最大的那个元素进行交换即可。

这样我们就把问题转化为求i的位置即可,i的元素的位置我们采用贪心的策略,只需要找到最晚降序的那个元素的位置就是i的位置。

代码如下:

class Solution {
public:vector<int> prevPermOpt1(vector<int>& arr) {int len = arr.size();for(int i = len - 2 ; i >= 0 ; i--){if(arr[i]>arr[i+1]){//找到i后面小于arr[i]的最大元素int j = len - 1;while(arr[j] >= arr[i] || arr[j] == arr[j-1])j--;swap(arr[i],arr[j]);break;}}return arr;}
};

LeetCode 1053相关推荐

  1. LeetCode 1053. 交换一次的先前排列

    1. 题目 给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的.按字典序排列小于 A 的 最大可能排列. 如果无法这么操 ...

  2. LeetCode 1053. 交换一次的先前排列(贪心法)

    题目 思路 这道题的要求初看还是比较复杂的:既要字典序小于原来的序列,又要在小于的字典序中求出最大值.按照题目的要求,应该尽量交换排在后面的元素,因为交换越到后面的元素所产生的的字典序"增量 ...

  3. LeetCode 31. 下一个排列(线性扫描)

    1. 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外 ...

  4. 【leetcode】1053. Previous Permutation With One Swap

    题目如下: Given an array A of positive integers (not necessarily distinct), return the lexicographically ...

  5. leetcode 最常见的150道前端面试题(简单题下)

    本文题目选自 LeetCode 精选 TOP 面试题[1],这些题在自己和同事亲身经历中,确实遇到的几率在百分之80%以上(成都和北京的前端岗位). 本篇是简单题(下)20题左右,上半部分详见leet ...

  6. Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)

    Leetcode题目分类指南 笔者在学习<算法导论>同时,希望能够配合Leetcode的题目进行分类模块化练习,该分类为笔者自己根据做题学习经验,结合<算法导论>的内容,给出L ...

  7. [LeetCode]135.Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  8. 【LeetCode】(55)Jump Game(Medium)

    题目 Jump Game Total Accepted: 52275 Total Submissions: 194395My Submissions Question  Solution  Given ...

  9. LeetCode 刷题之路(python版)

    摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...

最新文章

  1. 中科大京东最新成果:让AI像真人一样演讲,手势打得惟妙惟肖
  2. git bash命令_?你可能不太会用的10个Git命令
  3. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
  4. 新兴短距离无线通信技术ZigBee入门到进阶
  5. php 判断update返回为0_PHP进行数据库更新update操作,返回状态
  6. NSOperation的进阶使用和简单探讨
  7. iis服务器文件上传大小限制,windows服务器中iis限制文件大小方法
  8. SPFA+Dinic HDOJ 3416 Marriage Match IV
  9. Atitit.ui控件---下拉菜单选择控件的实现select html
  10. win10商店下载位置_手把手教您win10应用商店安装目录在哪的详尽处理门径
  11. 完整计算器java代码_计算器java代码
  12. seo关键词布局,网页头部优化(TDK),网站优化(古志强网络营销师)
  13. somachine3.1安装包和安装方法
  14. OpenSSH 用户枚举漏洞(CVE-2018-15919)服务器修复方法(亲测实用)
  15. 快速保存网页资料——fireshot与PDFdownload
  16. 人工智能技术的热潮让不少创业浪潮迅速崛起
  17. ubuntu系统下u盘只读的解决办法
  18. 【量化投资】策略一(聚宽)
  19. 手机文件怎么与电脑同步
  20. 适用ISO20000认证的机构有哪些?

热门文章

  1. 计算机if语句翻译,5.4.1 if 语句的翻译
  2. 在12306的程序猿面前,没人敢说委屈
  3. 如何将md文件转换为html
  4. 按照物种丰度对OTU表格进行拆分-丰富和稀有物种识别
  5. CT图像密度分辨力和空间分辨力的区别和联系
  6. PC电源的保持时间是用来做什么的?
  7. 如何克服自己懒惰的坏习惯?
  8. Vuze--Java路径配置
  9. 计算机组成原理(3)-哈工大
  10. 自考学历和成考学历哪个更高一些 有啥区别