LeetCode 31題:下一個排列

目錄

題目

思路

代碼


題目

整數數組的一個?排列? 就是將其所有成員以序列或線性順序排列。

  • 例如,arr = [1,2,3]?,以下這些都可以視作?arr?的排列:[1,2,3][1,3,2][3,1,2][2,3,1]?。

整數數組的?下一個排列?是指其整數的下一個字典序更大的排列。更正式地,如果數組的所有排列根據其字典順序從小到大排列在一個容器中,那么數組的?下一個排列?就是在這個有序容器中排在它后面的那個排列。如果不存在下一個更大的排列,那么這個數組必須重排為字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3]?的下一個排列是?[1,3,2]?。
  • 類似地,arr = [2,3,1]?的下一個排列是?[3,1,2]?。
  • 而?arr = [3,2,1]?的下一個排列是?[1,2,3]?,因為?[3,2,1]?不存在一個字典序更大的排列。

給你一個整數數組?nums?,找出?nums?的下一個排列。

必須?原地?修改,只允許使用額外常數空間。

示例 1:

輸入:nums = [1,2,3]
輸出:[1,3,2]

示例 2:

輸入:nums = [3,2,1]
輸出:[1,2,3]

示例 3:

輸入:nums = [1,1,5]
輸出:[1,5,1]

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

思路

一串數字排列的下一個排序找法是:從末尾開始找第一次出現nums[ i ] >nums[ i-1?] 的位置,在 i -1之前的數字排序不變,在 i -1之后尋找大于nums[ i-1 ]的最小值,找到后與nums[ i-1 ]交換。交換后,i - 1之后的數字按非遞減排序即可。


代碼

#include<stdio.h>
#include<stdlib.h>void nextPermutation(int* nums, int numsSize);int main()
{int nums[3]={1};int size=1;nextPermutation(nums,size);for(int i=0;i<size;i++){printf("%d ",nums[i]);}return 0;
}void nextPermutation(int* nums, int numsSize)
{int sign=0;int i;for(i=numsSize-1;i>0&&nums[i]<=nums[i-1];i--);if(numsSize==1)return ;if(i==0&&nums[i+1]<=nums[i]){int left=0,right=numsSize-1;while(left<right){int x=nums[left];nums[left]=nums[right];nums[right]=x;left++;right--;}}else{int target=i;int min=nums[i];for(int j=i+1;j<numsSize;j++){if(nums[j]>nums[i-1]&&nums[j]<min){min=nums[j];target=j;}}int a=nums[target];nums[target]=nums[i-1];nums[i-1]=a;int len=numsSize-i;for(int p=len/2;p>=1;p=p/2){for(int q=i+p;q<numsSize;q++){int temp=nums[q];int j;for(j=q-p;j>=i&&nums[j]>temp;j=j-p){nums[j+p]=nums[j];}nums[j]=temp;}}}
}

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36412.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink 火焰圖

方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能&#xff0c;并且可以細化到 subtask 粒度。 第一步&#xff1a;配置啟用功能 Flink 作業動態參數里增加配置&#xff1a;“rest.flamegraph.enabled”: “true” 并重啟作業。當前…

Blazor 簡單組件(0):簡單介紹

文章目錄 前言說明環境安裝 前言 Blazor 這個技術還是比較新&#xff0c;相關的UI組件還在完善&#xff0c;我這里提供一下我個人的組件開發。 說明 本UI組件是基于BootstrapBlazor(以下簡稱BB)開發。 BootstrapBlazor 文檔 環境安裝 C#小輪子&#xff1a;Visual Studio自…

C語言快速回顧(二)

前言 在Android音視頻開發中&#xff0c;網上知識點過于零碎&#xff0c;自學起來難度非常大&#xff0c;不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務列表》&#xff0c;結合我自己的工作學習經歷&#xff0c;我準備寫一個音視頻系列blog。C/C是音視頻必…

目前有哪些好用的免費開源wms倉儲管理軟件?

什么是開源&#xff1f; 開源指的是軟件的源代碼是公開可見和可自由使用的。開源軟件的授權許可通常允許用戶查看、修改和分發源代碼&#xff0c;以及根據自己的需求進行定制和擴展。 開源工具的核心理念是共享和協作。通過開放源代碼&#xff0c;開源軟件鼓勵用戶之間的合作…

Tubi 前端測試:遷移 Enzyme 到 React Testing Library

前端技術發展迅速&#xff0c;即便不說是日新月異&#xff0c;每年也都推出新框架和新技術。Tubi 的產品前端代碼倉庫始建于 2015 年&#xff0c;至今 8 年有余。可喜的是&#xff0c;多年來緊隨 React 社區的發展&#xff0c;Tubi 絕大多數的基礎框架選型都遵循了社區流行的最…

CentOS-6.3安裝MySQL集群

安裝要求 安裝環境&#xff1a;CentOS-6.3 安裝方式&#xff1a;源碼編譯安裝 軟件名稱&#xff1a;mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 下載地址&#xff1a;http://mysql.mirror.kangaroot.net/Downloads/ 軟件安裝位置&#xff1a;/usr/local/mysql 數據存放位…

達夢數據庫(dm8) Centos7 高可用集群

國產數據庫-達夢 一、環境詳情二、Centos7 參數優化&#xff08;所有節點&#xff09;三、創建用戶&#xff08;所有節點&#xff09;四、開始安裝&#xff08;所有節點&#xff09;五、服務注冊啟動 當前安裝&#xff1a;在指定版本環境下 測試&#xff0c;僅供參考 官網描述&…

風丘科技將亮相 EVM ASIA 2023

風丘科技將首次亮相 EVM ASIA 2023 WINDHILL will debut EVM ASIA 2023 ——可持續移動的未來 —The Future of SUSTAINABLE Mobility EVM ASIA 2023是亞太地區電氣化的國際性展會&#xff0c;專注于新能源汽車、充電技術及汽車零件制造等。展會致力于促進包括充電站、交通…

[系統安全] 五十二.DataCon競賽 (1)2020年Coremail釣魚郵件識別及分類詳解

您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系…

InnoDB文件物理結構解析5 - FIL_PAGE_INDEX

本文討論FIL_PAGE_INDEX頁的可回收垃圾記錄(Garbage/Deleted Records)&#xff0c;當我們刪除某一條記錄(delete from …)時&#xff0c;通常InnoDB并不會在物理存儲上進行完全刪除&#xff0c;而是在記錄上置一個刪除標志位&#xff0c;我們稱這些行記錄為垃圾記錄&#xff0c…

嵌入式Qt開發—Excel表格數據導出

有一個嵌入式Excel表格數據導出的需求&#xff1a;應用軟件運行于嵌入式Linux平臺上&#xff0c;在設備運行過程中&#xff0c;存儲了許多數據&#xff0c;這些數據想以表格的形式導出。考慮到Windows平臺的普遍性&#xff0c;需要將數據以excel表格形式導出&#xff0c;故選擇…

python庫打包

一、背景 想讓自己寫的python庫可以使用pip install xxx安裝。 二、環境準備 注冊PYPI賬號已經寫好的能正常使用的庫/方法/項目&#xff08;可以本地調用&#xff09;安裝依賴庫setuptools和twinw pip install setuptools pip install twine # 簡化將庫發布到PYPI流程的工…

“中國軟件杯”飛槳賽道晉級決賽現場名單公布

“中國軟件杯”大學生軟件設計大賽是由國家工業和信息化部、教育部、江蘇省人民政府共同主辦&#xff0c;是全國軟件行業規格最高、最具影響力的國家級一類賽事&#xff0c;為《全國普通高校競賽排行榜》榜單內賽事。今年&#xff0c;組委會聯合百度飛槳共同設立了“智能系統設…

C++11之后的C++標準特性宏定義方便功能特性測試

C是一個龐大的編程語言體系&#xff0c;它的高效性是可以直接連接硬件系統&#xff0c;它的靈活性是不斷迭代完善的通用語義機制&#xff0c;當下C的發展演進可謂一路狂奔。不同應用中需要知道C對應的平臺或者版本的功能特性&#xff0c;標準庫信息、C編譯器特性等&#xff0c;…

基于PHP的輕量級博客typecho

本文完成于 5 月中旬&#xff0c;發布時未在最新版本上驗證&#xff1b; 什么是 typecho &#xff1f; Typecho 是一款基于 PHP 的博客軟件&#xff0c;旨在成為世界上最強大的博客引擎。Typecho 在 GNU 通用公共許可證 2.0 下發布。支持多種數據庫&#xff0c;原生支持 Markdo…

24屆近5年南京大學自動化考研院校分析

今天給大家帶來的是南京大學控制考研分析 滿滿干貨&#xff5e;還不快快點贊收藏 一、南京大學 學校簡介 南京大學是一所歷史悠久、聲譽卓著的高等學府。其前身是創建于1902年的三江師范學堂&#xff0c;此后歷經兩江師范學堂、南京高等師范學校、國立東南大學、國立第四中…

JS 刪除的是最后一頁的最后一條,頁碼設置邏輯

刪除的場景&#xff1a; 解決思路&#xff1a; 1、計算操作后的總頁數 2、刪除成功之后的總頁數與當前總頁數進行比較 3、如果刪除成功之后的總頁數比小于當前總頁數&#xff0c;需要把當前頁碼減去1&#xff1b;否則&#xff0c;直接進行列表數據的請求 代碼實現 /*總條數…

VBA 學習筆記1 對象以及屬性

目錄 1 取得VBA對象1.1 取得工作簿對象1.2 取得工作表對象1.3 取得單元格對象1.4 取得對象的屬性1.5 文檔的方法1 進入vba 界面 方式之一&#xff1a; 快捷鍵&#xff1a;ALTERF11 運行方式之一&#xff1a; 進入vba界面&#xff0c;點擊綠色三角符號 1 取得VBA對象 1.1 取得…

DAY21

題目一 給定三個字符串str1、str2和aim&#xff0c; 如果aim包含且僅包含來自str1和str2的所有字符&#xff0c;而且在aim中屬于str1的字符 之間保持原來在str1中的順序&#xff0c;屬于str2的字符之間保持原來在str2中的順序&#xff0c;那么稱aim是str1和str2的交錯組成。實…

Springboot-Retrofit HTTP工具框架快速使用

在SpringBoot項目直接使用okhttp、httpClient或者RestTemplate發起HTTP請求&#xff0c;既繁瑣又不方便統一管理。 因此&#xff0c;在這里推薦一個適用于SpringBoot項目的輕量級HTTP客戶端框架retrofit-spring-boot-starter&#xff0c;使用非常簡單方便&#xff0c;同時又提供…