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

代码随想录算法训练营第一天 | 数组理论基础,977.有序数组平方结果再排序

  • 题目说明:数组本身有序,且元素值可通用负数(注意不是复数),平方结果值还能以有序方式排列

  • 标准想法就是在原数组基础上,把所有元素求平方结果值

  • 再将这个有新结果值的数组,进行排序

  • 生成平方结果值,是一个 O ( n ) O(n) O(n)的复杂度,再进行排序,使用快排也需要 O ( log ⁡ n ) O(\log n) O(logn)的复杂度

  • 总体来说,复杂度是要加一个尾巴的,如何去除这个尾巴呢,大师说用双指针

  • 为什么用双指针,因为我们发现,在原数组中,绝对值最大的数是排列在数组的左右两侧的,这是绝对的

  • 而两端数字的平方值都是最大的

  • 使用两个下标变量,分别指向数组两端,从两端向中间递进,就可以得到最大值到最小值的序列

  • 因为要覆盖,所以要用一个新数组,来保存这个新序列,空间复杂度只能放弃优化,这也是此算法的局限

  • #include <iostream>
    #include <vector>class Solution {
    public:std::vector<int> sortedSquares(std::vector<int>& nums) {int len = nums.size();std::vector<int> res;res.resize(len);for (int i = 0, j = len - 1, k = len - 1; i <= j; k--) {if (nums.at(i) * nums.at(i) > nums.at(j) * nums.at(j)) {res.at(k) = nums.at(i) * nums.at(i);++i;}else {res.at(k) = nums.at(j) * nums.at(j);--j;}}return res;}
    };
    int main()
    {std::vector<int> nums {-7, -3, 2, 3, 11};Solution s;std::vector<int> new_nums = s.sortedSquares(nums);for (auto it = new_nums.begin(); it != new_nums.end(); ++it)std::cout << *it << " ";std::cout << std::endl;return 0;
    }
    
  • 虽然有些局限,但算法的精巧与思维的灵动,还是让人叹为观止的

  • 汇总


http://www.mrgr.cn/news/80137.html

相关文章:

  • LAVE——基于大语言模型的新型代理辅助视频编辑工具允许用户根据自己的编辑风格进行调整
  • 【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )
  • Unity背包道具拖拽(极简版实现)
  • Xerces-C,一个成熟的 C++ XML 解析库!
  • 鸿蒙ZRouter动态路由框架—服务路由
  • 操作系统:文件系统
  • 玛哈特精密矫平机:制造业的隐秘
  • C语言数组和字符串笔记
  • 51c大模型~合集89
  • 考研数学【线性代数基础box(数二)】
  • ubuntu20.04+ROS Noetic 安装PX4+Mavros
  • Vue基础记录
  • 海康萤石摄像机接入EasyNVR流程:开启RTSP-》萤石视频添加到EasyNVR-》未来支持海康SDK协议添加到EasyNVR
  • 代码随想录算法训练营第三天 | 链表理论基础 | 707.设计链表
  • 从整个SecurityFilterChain的角度,一个请求经过Spring Security的流程
  • L23.【LeetCode笔记】验证回文串(剖析几种解法)
  • Spring 如何解决循环依赖?
  • Linux下socket广播通讯的实现
  • 图像融合算法笔记2024 CDTNet
  • pytorch_fid 安装笔记
  • 【AIGC】ChatGPT保护指令:高效提升GPTs提示词与知识库文件的安全性
  • 【PyCharm调试】显示一个对象值时会调用的方法
  • 长短期记忆神经网络(LSTM)介绍
  • 【ADS射频电路学习笔记】1. ADS基本操作
  • PHP搭建环境
  • depth wisepoint wise