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

每日一题(2)

有序数组的平方

方法一直接暴力后用快排的形式

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int> ans;for (int num: nums) {ans.push_back(num * num);}sort(ans.begin(), ans.end());return ans;}
};

这样写比较简单所以我抄的是官方的

这个方法就是把nums数组里面的元素拿出来然后给自身平方然后用sort进行快排后放回排序的数字

方法二用双指针的形式

是我自己的方法写的比较简略

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int n=nums.size();vector<int>result=vector<int>(n,0);int left=0;int right=n-1;int k=n-1;while(left<=right){int x=nums[left];int y=nums[right];if(x*x>y*y){ result[k--]=x*x;left++;}else{result[k--]=y*y;right--;}}return result;}
};

这样的话时间复杂度都会低一点,开始先把nums里面的元素个数开辟一个新的vector用来存储排序后的元素,将left作为首下标的开始,将right作为尾下标的进行将x设为第首下标元素,y为尾下标的开始,开始进行比较大的放到新建result的最后面,小的不动直到left>right时将最后的元素放入result数组中

问题解惑:1.为什么left和right在数组的两边而不再中间或者是其他地方?

因为数组是排好序的可能从负数开始到正数结束这样的话最大的肯定在两边因为要进行平方这样的话比较起来方便

2.为什么left<=right而不是<,这个要看情况像这个例子假如数组中要全部填到数组中如果是1,2,3,4,5这样的话最后2,3,4,5填进去了此时left和right都指向了一的下标这样的话要将此时的1填进去就要保证left==right满足条件所以要包含

所以总的来说还是要注意细节谢谢观看

http://www.xdnf.cn/news/20453.html

相关文章:

  • MySQL学习记录-索引
  • 携程社招前端面经
  • pthread_detach函数
  • 2025最新超详细FreeRTOS入门教程:第二章 FreeRTOS任务创建
  • 设计一个 AB 测试平台
  • 实例和对象的区别
  • 【目录-单选】鸿蒙HarmonyOS开发者基础
  • 自适应滤波器:Ch4 最小均方(LMS)算法
  • [光学原理与应用-433]:晶体光学 - 晶体光学是研究光在单晶体中传播规律及其伴随现象的分支学科,聚焦于各向异性光学媒质的光学特性
  • 上海“我店”模式:消费增值新玩法及其隐忧
  • 论文阅读:VGGT Visual Geometry Grounded Transformer
  • 【C++】引用的本质与高效应用
  • 【高等数学】第十一章 曲线积分与曲面积分——第三节 格林公式及其应用
  • javascript 国际化方法
  • AI 生成式艺术重塑动漫角色创作:从技术逻辑到多元可能性(一)
  • GPT-5发布:统一智能体时代的开启——从“工具”到“协作者”的范式跃迁
  • 详解MySQL环境变量配置及其在备份中的应用
  • 计算机内存的工作原理
  • 打工人日报#20250906
  • 模电仿真软件:MultSim14.3下载与安装
  • 【面板数据】各省制造业出口技术复杂度数据集(2010-2023年)
  • AP1271:高性能低功耗LDO稳压器,为精密电子设备提供稳定动力
  • python graphviz中文测试
  • queue容器的常用函数 和注意事项
  • windows server 2022安装终端
  • 计算机视觉(八):开运算和闭运算
  • C++:深入剖析vector
  • 数字化赋能全球扩张:名创优品携手巨益科技的信息化转型深度实践
  • 【开题答辩全过程】以 哈尔滨裕丰草莓园管理系统为例,包含答辩的问题和答案
  • JVM中常见的GC垃圾收集器