码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 之 有序数组的平方


    算法模拟: Algorithm Visualizer

    在线工具: C++ 在线工具

    如果习惯性使用Visual Studio Code进行编译运行,需要C++11特性的支持,可参考博客:

    VisualStudio Code 支持C++11插件配置


    有序数组的平方


    LeetCode 有序数组的平方

    问题:

    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
    
    示例1:
    输入:nums = [-4,-1,0,3,10]
    输出:[0,1,9,16,100]
    解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
    
    示例2:
    输入:nums = [-7,-3,2,3,11]
    输出:[4,9,9,49,121]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    思路:

    使用双指针方法

    首先,我们可以创建一个新的结果数组 result ,其大小与输入数组 nums 相同。

    然后,我们使用两个指针 left 和 right 分别指向数组的开头和结尾。

    原数组 nums 中的最大平方值可能位于两个指针所指向的元素中的较大值,则两者进行比对

    如果left比right的大,则将left的数值放到result的末尾,否则就放right的数值,

    并对应的将left向右移动一位或将right向左移动一位。

    C++示例

    class Solution {
      public:
      vector<int> sortedSquares(vector<int>& nums) {
        // 获取大小
        const int SIZE = nums.size();
        // 创建新的数组,并设置为同样的大小
        vector<int> result(SIZE);
        // 设置result的索引,从末尾开始
        int index = SIZE - 1;
        // 设置左右索引
        int left = 0, right = SIZE - 1;
        while(left <= right) {
          // 获取左右索引的数值,进行比对
          const int leftValue = nums[left] * nums[left];
          const int rightValue = nums[right] * nums[right];
          if (leftValue > rightValue) {
            // 左边数值大于右边,则将leftValue放到新数组的指定索引处,并向右偏移
            result[index] = leftValue;
            left++;
          }
          else {
            // 右边数值大于左边,则将rightValue放到新数组的指定索引处,并向左偏移
            result[index] = rightValue;
            right--;
          }
          index--;
        }
        return result;
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    TypeScript示例

    function sortedSquares(nums: number[]): number[] {
      let result: number[] = new Array(nums.length);
      let left = 0;
      let right = nums.length -1;
      let index = nums.length - 1;
      while (left <= right) {
        const leftValue = nums[left] * nums[left];
        const rightValue = nums[right] * nums[right];
        if (leftValue >= rightValue) {
          result[index] = leftValue;
          left++;
        } else {
          result[index] = rightValue;
          right--;
        }
        index--;
      }
      return result;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    待定…

  • 相关阅读:
    可靠的可视化监控平台应用在那些场景?
    十一月组队学习报名啦!
    Visual Studio 和 VSCode 哪个好?
    天天写业务代码,我给撸了一个业务处理框架
    SIEM 中不同类型日志监控及分析
    【java学习】面向对象特征之一:封装和隐藏(23)
    FancyBox.js基于JQuery图集弹层插件用法
    SpringBoot Web开发----简单功能分析
    Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
    利用条形码生成器在Word 2013中轻松制作条形码的方法
  • 原文地址:https://blog.csdn.net/qq_24726043/article/details/132928276
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号