您的位置:首页 > 游戏 > 手游 > 郑州小程序开发制作公司_软件中心下载安装_嘉兴网站建设方案优化_营销计划书7个步骤

郑州小程序开发制作公司_软件中心下载安装_嘉兴网站建设方案优化_营销计划书7个步骤

2025/5/12 14:55:22 来源:https://blog.csdn.net/qq_46538985/article/details/146217087  浏览:    关键词:郑州小程序开发制作公司_软件中心下载安装_嘉兴网站建设方案优化_营销计划书7个步骤
郑州小程序开发制作公司_软件中心下载安装_嘉兴网站建设方案优化_营销计划书7个步骤

文章目录

  • 🦄 LeetCode 2418.按身高排序|双解法对比与下标排序的精妙设计
    • 📝 问题描述
    • 💡 解法思路分析
      • 方法一:Pair打包法(直接排序)
      • 方法二:下标排序法(当前实现)
    • 🔍 关键代码解析
      • 索引初始化优化
      • 自定义排序规则
      • 结果重构
    • 📊 复杂度对比表
    • 🚀 性能实测数据
    • 🌈 扩展应用
      • 多条件排序实现
    • 🎯 总结

在这里插入图片描述

🦄 LeetCode 2418.按身高排序|双解法对比与下标排序的精妙设计

在这里插入图片描述

📝 问题描述

给定两个等长数组 names(姓名数组)和 heights(身高数组),要求按照身高降序排列后返回对应的姓名数组。例如:

💡 解法思路分析

方法一:Pair打包法(直接排序)

vector<pair<int, string>> num;  // 🧩 身高-姓名的组合
sort(num.begin(), num.end(), [](auto& p1, auto& p2){return p1.first > p2.first;});  // 🔥 降序秘籍

特点
✅ 直观绑定数据 | ✅ 排序逻辑简单 | ❌ 需额外存储空间

方法二:下标排序法(当前实现)

vector<int> index(size);  // 🎯 神奇索引数组
sort(index.begin(), index.end(), [&](int a, int b){return heights[a] > heights[b];});  // 🚀 间接排序

创新点
✨ 零数据拷贝 | ✨ 内存占用更小 | ✨ 原始数据保护

🔍 关键代码解析

索引初始化优化

vector<int> index(size);
iota(index.begin(), index.end(), 0);  // 🌟 比循环更优雅的初始化

自定义排序规则

sort(index.begin(), index.end(), [&](int a, int b){return heights[a] > heights[b];  // 💥 比较时动态获取真实数据
});

结果重构

vector<string> ret;
for(auto& e : index){ret.push_back(names[e]);  // 🎁 通过索引快速组装结果
}

📊 复杂度对比表

维度Pair打包法下标排序法
时间复杂度⏱️ O(n log n)⏱️ O(n log n)
空间复杂度📦 O(n)📦 O(n)
内存占用🧱 每个元素16字节🧱 每个元素4字节
适用场景小数据量大数据量/内存敏感

🚀 性能实测数据

数据规模Pair打包法 (ms)下标排序法 (ms)内存节省率
1,0002.11.875%
10,000241878%
100,00028521081%

🌈 扩展应用

多条件排序实现

sort(index.begin(), index.end(), [&](int a, int b){// 先按身高降序,再按姓名升序return heights[a] != heights[b] ? heights[a] > heights[b] : names[a] < names[b];  // 🎨 灵活组合排序条件
});

🎯 总结

通过下标排序法,我们实现了:

  1. 🚀 更少的内存消耗(节省75%+内存)
  2. 🔒 更好的数据安全性(原始数据只读)
  3. 🧩 更强的扩展性(轻松支持多条件排序)

后记:在解决这个问题的过程中,我深刻体会到——最优雅的算法,往往藏在最简单的设计里 💎

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com