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

个性手绘个人网站模板下载莱芜金点子最新租房信息

个性手绘个人网站模板下载,莱芜金点子最新租房信息,wordpress 文章登陆可见,wordpress耗资源目录 第一步:明确问题本质 第二步:从最朴素的思考出发 第三步:利用“有序性” —— 双指针思想 第四步:代码实现 🤔 为什么sizeof(A) 是整个数组的字节大小? 第五步:复杂度分析 第一步&am…

目录

第一步:明确问题本质

第二步:从最朴素的思考出发

第三步:利用“有序性” —— 双指针思想

 第四步:代码实现

🤔 为什么sizeof(A) 是整个数组的字节大小? 

第五步:复杂度分析


第一步:明确问题本质

我们的问题是:

给定两个有序数组 A 和 B,合并成一个新的有序数组 C。

 输入:

  • 数组 A = [1, 3, 5](已排序)

  • 数组 B = [2, 4, 6](已排序)

 目标:

  • 输出数组 C = [1, 2, 3, 4, 5, 6](也是升序排列)

第二步:从最朴素的思考出发

假设我们是个完全不懂算法的人,我们也知道一个最直接的想法:

把两个数组接在一起,然后对它排序!

思路大概是这样:

int A[3] = {1, 3, 5};
int B[3] = {2, 4, 6};C = A + B           // 合并:C = [1, 3, 5, 2, 4, 6]
C.sort()            // 排序:C = [1, 2, 3, 4, 5, 6]

✅ 正确,但:

  • 时间复杂度为 O((m+n) log (m+n))

  • 没有利用“原数组已排序”这一信息。

第三步:利用“有序性” —— 双指针思想

这是我们“从零开始”的第一个优化:用两个指针分别指向两个数组的起始位置。

📍关键想法:

我们想象两个手指:

  • 一个指向 A 的当前元素(叫 i

  • 一个指向 B 的当前元素(叫 j

我们每次比较 A[i]B[j],把较小的那个放进结果数组 C,然后把对应的指针向前移动一步。

这样我们就一步步构造了有序数组 C,直到 A 和 B 的元素都被用完。

 第四步:代码实现

第一步:定义数组 & 初始变量

#include <iostream>
using namespace std;int main() {int A[] = {1, 3, 5};int B[] = {2, 4, 6};int m = sizeof(A) / sizeof(A[0]);int n = sizeof(B) / sizeof(B[0]);int C[m + n];  // 合并后数组
  • sizeof(A) 是整个数组的字节大小

  • sizeof(A[0]) 是一个元素的字节大小

  • 所以 m 是 A 的元素个数(同理 B 的个数是 n

🤔 为什么sizeof(A) 是整个数组的字节大小? 

在定义的时候:

int A[] = {1, 2, 3};

此时 A 是一个“数组变量名”,编译器知道 A 是长度为 3 的整型数组,是固定内存块,sizeof(A) 是数组大小:3 × sizeof(int)

但在其他地方,比如:

int* ptr = A;

 这里 A 的确是 数组名退化成了指针。它变成了指向第一个元素的指针 &A[0],但它本身不是个指针变量。

总结:数组和指针的差异

场景A 是什么?sizeof(A) 返回原因
定义处 int A[3];数组整个数组字节数编译期知道大小
函数参数 void foo(int A[])指针指针大小(4/8字节)退化成 int*
int* p = A;指针指针大小A 自动退化成指针

数组名在定义时不是指针,是整个数组;在表达式中是指针,是地址。 

 第二步:双指针合并逻辑

while (i < m && j < n) {if (A[i] < B[j]) {C[k] = A[i];i++;} else {C[k] = B[j];j++;}k++;
}
  • 每次比较 A[i] 和 B[j] 谁更小

  • 小的放到 C[k],移动对应指针

  • k 永远负责指向 C 的下一个空位

第三步:处理剩余元素 

while (i < m) {C[k] = A[i];i++;k++;
}while (j < n) {C[k] = B[j];j++;k++;
}
  • 可能 A 或 B 有剩下的没合并完(另一个已经走完了)

  • 全部照顺序复制进 C

 完整代码

#include <iostream>
using namespace std;int main() {int A[] = {1, 3, 5};int B[] = {2, 4, 6};int m = sizeof(A) / sizeof(A[0]);int n = sizeof(B) / sizeof(B[0]);int C[100];  // 假设长度不会超出 100int i = 0, j = 0, k = 0;// 双指针合并while (i < m && j < n) {if (A[i] < B[j]) {C[k] = A[i];i++;} else {C[k] = B[j];j++;}k++;}// 把剩余的 A 复制进去while (i < m) {C[k] = A[i];i++;k++;}// 把剩余的 B 复制进去while (j < n) {C[k] = B[j];j++;k++;}// 输出合并后的结果cout << "Merged Array: ";for (int x = 0; x < m + n; x++) {cout << C[x] << " ";}cout << endl;return 0;
}

第五步:复杂度分析

项目分析
时间复杂度O(m + n),每个元素只访问一次
空间复杂度O(m + n),结果数组 C
http://www.dtcms.com/wzjs/583952.html

相关文章:

  • 唐山网站建设冀icp备上海网站建设内容更新
  • 雄安免费网站建设网店美工主要负责什么工作
  • 青海省住房和城乡建设网站万网域名安全锿
  • 怎么注销网站查备案淘宝网站建设方式
  • 郑州网站模板建设郑州网站设计培训
  • 在天极网做网站有效果吗上海市建设协会考试网站
  • 云南网站开发公司找哪家奉节网站建设
  • 建设银行网站怎么查流水定制头像的网站
  • 创建电子商务网站网站建设招标需求
  • 门户网站首页模板下载网络舆情中心
  • 企业的网站开发费用摊销几年题库网站建设
  • 做物流网站模块特别炫酷的网站
  • 商务网站开发步骤副食店年报在哪个网站做
  • 常州哪家做网站便宜印度网站建设多少钱
  • 河南省工程建设监理协会网站wordpress小工具浮动
  • 朋友 合同 网站制作做攻略的网站
  • wordpress怎么加入站长统计宁波男科公立医院哪家最好
  • 做网站推广怎么样用wang域名做购物网站怎么样
  • 免费网站建设公司联系方式免费浏览的不良网站
  • 简述网站建设的标准php网站开发工具有哪些
  • 网站建设花费录什么费用网站服务公司有哪些
  • 鼎诚网站建设凡客诚品老板
  • wordpress网站突然打不开wordpress使用多说头像
  • 网站开发怎么样?做商城型网站
  • 网站建设遇到的问题四川建设人力资源网官网
  • 贵州做网站的最新新闻热点事件素材
  • asp.net网站本机访问慢北海网站制作
  • 做puzzle的网站wordpress怎么编辑
  • 电竞竞猜网站 建设建设一个网站大概多少钱
  • 网站外链怎么购买北京室内设计