给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。 数据范围:排列长度满足 ,排列中的值满足-笔试面试资料

这是qklbishe.com第18609 篇笔试面试资料
提供答案分析,通过本文《给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。
数据范围:排列长度满足 ,排列中的值满足-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。
数据范围:排列长度满足 给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。          数据范围:排列长度满足  ,排列中的值满足 ,排列中的值满足 给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。          数据范围:排列长度满足  ,排列中的值满足
Java

给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。          数据范围:排列长度满足  ,排列中的值满足 呼啦(竟然有人和我同名)

import java.util.*; public class Solution {     ArrayList<ArrayList<Integer>> res=new ArrayList<>();     boolean[] mark;     public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {         mark = new boolean[num.length];         Arrays.sort(num);         LinkedList<Integer> path = new LinkedList<Integer>();         dfs(num,path);         return res;     }     public void dfs(int[] num,LinkedList<Integer> path){         if(path.size()==num.length){             if(res.contains(path)) return;             res.add(new ArrayList(path));                 return;         }         for(int i=0;i<num.length;i++){             if(mark[i]==true)                 continue;             path.add(num[i]);             mark[i]=true;             dfs(num,path);             path.remove(path.size()-1);             mark[i]=false;         }     }     public int[] nextPermutation (int[] nums) {         if(nums.length==1) return new int[]{nums[0]};         int[] cur=new int[nums.length];         for(int i=0;i<nums.length;i++){             cur[i]=nums[i];         }         ArrayList<ArrayList<Integer>> res = permuteUnique(cur);         int mark=0;int n=res.get(0).size();         for(int i=0;i<res.size();i++){             ArrayList a=res.get(i);             for(int j=0;j<n;j++){                 if((Integer)a.get(j)==nums[j]){                     if(j==n-1)                         mark=i;                     continue;}                 else break;             }         }         if(mark==res.size()-1){             mark=-1;         }         int[] ans=new int[n];int cout=0;         for(int i:res.get(mark+1)){             ans[cout++]=i;         }         return ans;     } } 
我肯定是对的,只不过超时了,终究还是太菜,谁写出来了踢我一脚

今天 18:30:33 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 给定一个排列,请返回字典序的下一个更大的排列,如果不存在更大的排列,则返回最小的排列。 数据范围:排列长度满足 ,排列中的值满足-笔试面试资料

提供最优质的资源集合

立即查看 了解详情