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

湘潭做网站价格 d磐石网络关于搜索引擎的搜索技巧

湘潭做网站价格 d磐石网络,关于搜索引擎的搜索技巧,免费微信网站模板下载工具,石柱城乡建设委官方网站164.最大间距 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。 示例一: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在…

在这里插入图片描述

164.最大间距

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。

示例一:

输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6)(6,9) 之间都存在最大差值 3

示例二:

输入: [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0

示例三:

你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。

解法一:排序直接莽(复习一下归并)

class Solution {
public:
void mergesort(vector<int>&nums,int beg,int end){if(beg>=end)return;int mid=beg+(end-beg)/2;mergesort(nums,beg,mid);mergesort(nums,mid+1,end);vector<int>nums2(nums.begin()+mid+1,nums.begin()+end+1);merge(nums,beg,mid,end,nums2,end-mid);}
void merge(vector<int>&nums1,int beg,int mid,int end,vector<int>&nums2,int n){int right=end+1,cur1=mid,cur2=n-1;while(1){if(cur1==beg-1&&cur2==-1)return ;else if(cur1==beg-1&&cur2!=-1){right--;nums1[right]=nums2[cur2];cur2--;}else if(cur1!=beg-1&&cur2==-1)return ;else if(nums1[cur1]>=nums2[cur2]){right--;nums1[right]=nums1[cur1];cur1--;}else if(nums1[cur1]<nums2[cur2]){right--;nums1[right]=nums2[cur2];cur2--;}}}int maximumGap(vector<int>& nums) {int n=nums.size();if(n==0||n==1)return 0;mergesort(nums,0,n-1);int jie=INT_MIN;for(int i=1;i<nums.size();i++)jie=max(jie,abs(nums[i]-nums[i-1]));return jie;}
};

在这里插入图片描述

解法二(基数排序):

补充:基数排序三步走
1.找出数组中最大的数字的位数 maxDigitLength
2.获取数组中每个数字的基数(按高位计数)
3.遍历 maxDigitLength 轮数组,每轮按照基数对其进行排序

class Solution {
public:
void radixsort(vector<int>&nums){int n=nums.size();int maxNum=*max_element(nums.begin(),nums.end());   // 计算最大数字的长度int maxBit=1,num=10;// 计算最长数字的长度while(num<=maxNum){maxBit++;num*=10;}            vector<int>buf(n,0);for(int i=0,place=1;i<maxBit;i++,place*=10){vector<int>count(10,0);for(int j=0;j<n;j++){count[(nums[j]/place)%10]++;}for(int j=1;j<10;j++){count[j]+=count[j-1];}for(int j=n-1;j>=0;j--){int num=(nums[j]/place)%10;buf[count[num]-1]=nums[j];count[num]--;}copy(buf.begin(),buf.end(),nums.begin());// 计数排序完成后,将结果拷贝回 arr 数组}
}int maximumGap(vector<int>& nums) {int n=nums.size();int jie=0;radixsort(nums);for(int i=1;i<n;i++){jie=max(jie,nums[i]-nums[i-1]);}return jie;}
};

在这里插入图片描述
补充:
如果数组中包含负数,如何进行基数排序呢?
我们很容易想到一种思路:将数组中的每个元素都加上一个合适的正整数,使其全部变成非负整数,等到排序完成后,再减去之前加的这个数就可以了。
但这种方案有一个缺点:加法运算可能导致数字越界,所以必须单独处理数字越界的情况。
事实上,有一种更好的方案解决负数的基数排序。那就是在对基数进行计数排序时,申请长度为 19 的计数数组,用来存储 [-9, 9] 这个区间内的所有整数。在把每一位基数计算出来后,加上 9,就能对应上 counting 数组的下标了。也就是说,counting 数组的下标 [0, 18]对应基数 [-9, 9]。

http://www.lbrq.cn/news/2600209.html

相关文章:

  • 龙华区城市建设局网站百度网站客服
  • 表格网站滚动字体怎么做的seo外包公司怎么样
  • 营销型企业网站建设教案关键词排名手机优化软件
  • 集团门户网站建设费用科目免费seo推广软件
  • 怎么做视频还有网站吗最近韩国电影片
  • 深圳百度推广电话seo排名系统源码
  • 手机收藏网站代码视频号视频下载助手app
  • 做违法网站会怎样seo网站推广的主要目的是什么
  • 短视频营销策划方案范文百度关键词优化首选667seo
  • 产品设计工资一般多少seo网站有优化培训吗
  • 秦皇岛海三建设广州seo网站推广公司
  • 阿里巴巴做公司网站磁力屋 最好用
  • 权威的锦州网站建设seo职位招聘
  • 怎么查那些人输入做网站3分钟搞定网站seo优化外链建设
  • 上海网站设计kinglinkwindows优化大师是什么
  • 网站经营性备案百度广告推广价格
  • 网站建设委托外包协议网站权重查询
  • 长沙手机模板建站快排seo软件
  • 页面设计的网站九易建网站的建站流程
  • 铁岭做网站包括哪些中国职业培训在线官方网站
  • 信阳电子商务网站建设单页应用seo如何解决
  • wordpress代码添加文章字段栏目关键词查询优化
  • 天津河西做网站公司百度指数网址
  • 寻找东莞微信网站建设seo先上排名后收费
  • wordpress虚拟3d网站网络推广方案模板
  • 怎样建设有价值的网站小程序开发文档
  • 自己做的网站涉黄阿里指数官网最新版本
  • 免费制作网站和网页成都seo培
  • 建设雅马哈摩托车官网报价及图片网站关键词排名优化
  • 网站建设 软件开发网站搜索引擎优化情况怎么写
  • Linux网络编程:TCP初体验
  • SAP FI模块凭证增强逻辑的策略
  • 【QT】常⽤控件详解(四)常用显示类控件类 Label LCDNumber ProgressBar Calendar Widget
  • vllm启动Qwen/Qwen3-Coder-30B-A3B-Instruct并支持工具调用
  • 网关与路由器的区别
  • 一个网页的加载过程详解