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

关工委网站建设培训机构管理系统

关工委网站建设,培训机构管理系统,群晖wordpress端口无法登陆,玉田网站建设目录 题目解法初始数组1. 分解阶段2. 合并阶段结果 为什么要创建长整型ll mid l ((r - l) >> 1);其中的>>是什么意思 题目 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O…

目录

  • 题目
  • 解法
      • 初始数组
      • 1. 分解阶段
      • 2. 合并阶段
      • 结果
  • 为什么要创建长整型
  • ll mid = l + ((r - l) >> 1);其中的>>是什么意思

题目

给你一个整数数组 nums,请你将该数组升序排列。

你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。

解法

typedef long long ll;
const int N = 1e5 + 1;
class Solution {ll help[N];void merge(vector<int>& nums, ll l, ll r) {//1、将数组排序if (l >= r) return;ll mid = l + ((r - l) >> 1);ll i = l, j = mid + 1, t = l;while (i <= mid && j <= r) {help[t++] = nums[i] <= nums[j] ? nums[i++] : nums[j++];}//2、将左半区域剩余元素排序while (i <= mid) {help[t++] = nums[i++];}//3、将右半区域剩余元素排序while (j <= r) {help[t++] = nums[j++];}//4、复制数组for (int i = l; i <= r; i++) {nums[i] = help[i];}return;}void mergeSort(vector<int>& nums, ll l, ll r) {if (l < r) {ll mid = l + ((r - l) >> 1);//左边区域mergeSort(nums, l, mid);//右边区域mergeSort(nums, mid + 1, r);//合并左右区域merge(nums, l, r);}}public:vector<int> sortArray(vector<int>& nums) {int n = nums.size();mergeSort(nums, 0, n - 1);return nums;}
};

好的,下面我将详细展示使用归并排序的过程,以数组 nums = {38, 27, 43, 3, 9, 82, 10} 为例。

初始数组

nums = {38, 27, 43, 3, 9, 82, 10}

1. 分解阶段

归并排序首先将数组分解成子数组,直到每个子数组只包含一个元素。

  1. 初始分解:

    {38, 27, 43, 3, 9, 82, 10}
    
  2. 继续分解:

    {38, 27, 43}  {3, 9, 82, 10}
    
  3. 再次分解:

    {38} {27, 43}  {3, 9} {82, 10}
    
  4. 继续分解:

    {38} {27} {43}  {3} {9} {82} {10}
    

2. 合并阶段

接下来开始合并和排序:

  1. 合并 {27}{43}

    {27, 43}
    
  2. 合并 {27, 43}{38}

    {27, 38, 43}
    
  3. 合并 {3}{9}

    {3, 9}
    
  4. 合并 {82}{10}

    {10, 82}
    
  5. 合并 {3, 9}{10, 82}

    {3, 9, 10, 82}
    
  6. 最后合并 {27, 38, 43}{3, 9, 10, 82}

    {3, 9, 10, 27, 38, 43, 82}
    

结果

经过归并排序后,数组 nums 最终变为:

nums = {3, 9, 10, 27, 38, 43, 82}

为什么要创建长整型

typedef long long ll;:这行代码为 long long 类型创建了一个别名 ll。这样,在后续的代码中,你可以使用 ll 来代替 long long,使代码更简洁易读。

const int N = 1e5 + 1;:这行代码定义了一个常量 N,其值为 100001。通常在算法中,N 可能用于表示数组的最大大小或某种限制,以确保在使用时不会越界。

在 C++ 中,创建 long long 类型的原因主要是为了处理更大的整数范围。long long 通常用于存储可能超出 int 范围的数值,特别是在涉及到大数运算、数组索引、计数或求和时。以下是一些具体的原因:

  1. 数值范围int 的范围通常是 -2,147,483,648 到 2,147,483,647,而 long long 的范围可以达到 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,适合处理更大的数值。

  2. 避免溢出:在进行大量累加、乘法等运算时,如果使用 int,可能会出现溢出错误。使用 long long 可以降低这种风险。

  3. 算法需要:在一些算法(如动态规划、图算法等)中,可能需要处理大量数据或计算结果,使用 long long 确保结果不会溢出。

因此,在需要处理较大整数的情况下,使用 long long 是一种常见的做法。

ll mid = l + ((r - l) >> 1);其中的>>是什么意思

“”>> 是位移运算符,表示右移操作。在这个表达式中,(r - l) >> 1 相当于将 (r - l) 的值除以 2,用于计算中间值 mid,以提高效率。

http://www.tj-hxxt.cn/news/81747.html

相关文章:

  • 北京网站建设seo阿里云万网域名查询
  • 学校网站模板wordpress网页模板下载
  • b站网页入口免费不收费seo优化外包
  • 网站定制制作拼多多关键词排名查询工具
  • 西安做网站seo泉州百度广告
  • 网站图怎么做会高清图片crm管理系统
  • 建站公司互橙知乎seo属于什么职位类型
  • 服务器能放多少个网站搜索平台
  • 东营做网站网络营销服务外包
  • 陕西网站备案流程手机怎么制作网页
  • 如何攻击织梦做的网站方法大数据营销成功案例
  • 小题狂做+官方网站网络营销简介
  • 制作网站生成器一个人怎么做独立站shopify
  • 汽车之家网页版官网pc优化工具
  • 国家建设规范网站品牌公关
  • wap建站模板seo主要做哪些工作
  • 西安php网站建设最有创意的广告语30条
  • 柳江企业网站建设价格做seo需要用到什么软件
  • 东莞网站建设网站排名优化网络营销策划书1500字
  • 江苏镇江丹阳疫情最新消息今天seo优化方案
  • wordpress制作友情链接页面长沙网站seo优化公司
  • 做网站和做小程序有什么不同百度河南代理商
  • 建设一个网站的硬件要求吗公司网站制作教程
  • 做一的同志小说网站网店代运营骗局
  • 开发制作一个网站seo诊断书案例
  • 主机屋如何做网站万网注册域名查询
  • 有哪些好的印花图案设计网站线上营销策划方案
  • 爱站云网站建设heikw厦门seo优化
  • 手机网站 建设建站模板网站
  • 有没有网站找人帮忙做图游戏推广员是诈骗吗