当前位置: 首页 > news >正文

如何用本机电脑做网站服务器网络营销与直播电商专业介绍

如何用本机电脑做网站服务器,网络营销与直播电商专业介绍,唐山网站制作,公司网站上的员工风采怎么做题目描述 整数数组的一个排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的下一个排列是指其整数的下一个字典序更大的排列。更正式地&…

题目描述

整数数组的一个排列 就是将其所有成员以序列或线性顺序排列。

例如,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,在原来的基础上增加 2,增加的要是最少

  • 第一个条件:将后面的大数和前面的小数进行交换,即可增大数值。如13456,将6和3交换就可以得到一个更大的数16453
  • 第二个条件:交换的数尽可能的靠后,如将5和6交换得到的数13465会比16453小。此外,对第一个交换位置后的数字进行升序排列,将大数往后移,即可以得到更小的数值,如将6和3进行交换后得到16453,再将第一个交换位置6后面的数字进行升序排列,得到16345,会比原来大,但是数值更小了。

故可以总结出算法(这里就使用题解给出的算法):

  • 首先从后向前查找第一个顺序对 (i,i+1),满足 a[i]<a[i+1]。这样「较小数」即为 a[i]。此时 [i+1,n)必然是下降序列。
  • 如果找到了顺序对,那么在区间 [i+1,n)中从后向前查找第一个元素 j 满足a[i]<a[j]。这样「较大数」即为 a[j]。
  • 交换 a[i]与 a[j],此时可以证明区间 [i+1,n)必为降序。我们可以直接使用双指针反转区间 [i+1,n)使其变为升序,而无需对该区间进行排序。

拿一个序列举例:

输入:[5, 4, 7, 5, 3, 2]
输出:[5, 5, 2, 3, 4, 7]
首先从后往前找到第一个元素,使a[i]<a[i+1],即为4,定位较小数
然后从后往前找到第一个元素,使a[j]>a[i],即为5,定位较大数
将较小数和较大数进行交换,得到5,5,7,4,3,2
对较小数位置后面的数进行升序排列,得到5,5,2,3,4,7,即为最终答案

代码

class Solution {public void nextPermutation(int[] nums) {// 判断是否使降序数组,降序数组直接返回升序结果int flag = 0;for(int i = 0;i < nums.length-1; i++){if(nums[i] < nums[i+1]){flag = 1;break;}}if(flag == 0){// 若数组是完全降序排列,则变为升序即可Arrays.sort(nums);}else{int p = 0, q = 0;// 找到较小数for(q = nums.length-2; q >= 0; q --)if(nums[q] < nums[q+1])break;// 找到较大数for(p = nums.length-1; p > q; p --)if(nums[q] < nums[p])break;// 交换两个数swap(nums, p, q);// 将较小数索引后面的数按升序排列,因为是降序排列,所以只需要逆置即可reverse(nums, q+1);}}public void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}public void reverse(int[] nums, int start) {int left = start, right = nums.length - 1;while (left < right) {swap(nums, left, right);left++;right--;}}
}
http://www.dinnco.com/news/44286.html

相关文章:

  • 济南企业制作网站百度网址大全官网旧版
  • 用php源码如何建设网站游戏推广平台代理
  • html可以做动态网站吗企业网站的优化建议
  • 哈尔滨网站建设企业2345网址导航安装
  • wordpress完全静态化插件百家港 seo服务
  • 企业内部的网站系统西安市网站
  • 网站建设实训致谢语旺道seo优化
  • wordpress汉化主题下载地址成都比较靠谱的seo
  • 做企业平台的网站黄页大全
  • 网站建设一般多少钱比较合适福建优化seo
  • 介绍个人网站的ppt怎么做针对本地的免费推广平台
  • 四川高速公路建设开发集团有限公司网站西安网站推广慧创科技
  • 网站建设移动网络公司百度推广后台登录首页
  • 临桂城乡建设局网站淘宝指数转换
  • 河南做网站公司有哪些怎么样建一个网站
  • 青岛做网站找哪家好google推广平台怎么做
  • 下载应用商店app下载安装百度关键词seo优化
  • 网站加盟代理手游推广平台哪个好
  • 政府微网站建设方案营销网络是啥意思
  • 用前端框架做自适应网站cpa推广联盟平台
  • 山西网站建设费用东莞最新疫情
  • 自己怎么做商城网站视频教程微信朋友圈营销方案
  • 网站一般用什么软件做成都公司网站seo
  • 做进口产品的网站阿里云域名注册
  • 在线分析网站阿里巴巴官网
  • 做网站图片分辨率多少百度云资源搜索网站
  • 怎么做金融营销网站南京seo域名
  • 网址怎么输入百度seo优化排名客服电话
  • 贵溪市城乡建设局网站广告公司图片
  • 国内购物网站案例分析常见的搜索引擎有哪些?