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

算法——有序数组的平方(leetcode977)

有序数组的平方,题目是给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

解这道题一般来说有两种方法一种是暴力解法一种是双指针(时刻要注意以及理解题目的大意方便我们思考解法)

对于暴力解法简单来说逻辑就是将给定数组中的每一个元素平方后覆盖元素得到一个元素平方过后的数组接着进行排序即可(可手写排序算法或者使用java中的排序方法)

对于双指针解法来说由于给定的数组是非递减顺序的整数数组所以我们可以开辟一个新的数组(与给定数组等长)来存储平方后的元素我们给题目给定数组设置两个指针一个指向初始位置一个指向末端位置接着通过比较两个指针元素平方的大小将大的元素的平方放入我们新创建的数组索引末端位置如果相等则随意放入一个元素即可,放入后索引减1重复上述步骤直至原数组的一个指针越过另一个指针或者新数组放满为止输出数组即可

暴力解法与双指针对比来看暴力解法时间复杂度较高可达到O(n^2)而空间复杂度较低可为O(1)

双指针解法来说时间复杂度较低(O(n))但空间复杂度因为创建新数组占用内存空间所以相对较高为O(N)

暴力解法

class Solution {
    public int[] sortedSquares(int[] nums) {
            //平方数组元素
            for(int i=0;i<nums.length;i++){
                nums[i]=nums[i]*nums[i];
            }
            int temp=0;
        //冒泡排序
        for (int i = 0; i < nums.length-1; i++) {
            for(int j=0;j<nums.length-1;j++){
                if(nums[j]>nums[j+1]){
                    temp=nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
            }
        }
            return nums;
        }
}

双指针解法

class Solution {
    public int[] sortedSquares(int[] nums) {
           int[] arr=new int[nums.length];
            int i=0;
            int j=nums.length-1;
            int k=arr.length-1;
            while(i<=j){
                if(nums[i]*nums[i]>nums[j]*nums[j]){
                    arr[k]=nums[i]*nums[i];
                    i++;
                    k--;
                }else if(nums[i]*nums[i]<=nums[j]*nums[j]){
                    arr[k]=nums[j]*nums[j];
                    j--;
                    k--;
                }
            }
            return arr;
        }
}


http://www.kler.cn/a/399442.html

相关文章:

  • Ubuntu 22.04.4 LTS + certbot 做自动续签SSL证书(2024-11-14亲测)
  • Spring Boot 接口防重复提交解决方案
  • Unity3D 完整直升机控制器(虚拟仿真级别)
  • MySQL-关联查询和子查询
  • 录的视频怎么消除杂音?从录制到后期的杂音消除攻略
  • 嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)
  • 力扣第 55 题 跳跃游戏
  • 大语言模型通用能力排行榜(2024年11月8日更新)
  • 项目技术栈-解决方案-注册中心
  • JavaSE常用API-日期(计算两个日期时间差-高考倒计时)
  • Android 删除设置的WLAN偏好选项菜单,即设置不可见
  • 【PHP】ThinkPHP基础
  • [NSSCTF Round#16 Basic]了解过PHP特性吗 详细题解
  • web前端开发网页--css样式的使用
  • Prometheus面试内容整理-场景应用和故障排查
  • Flutter开发之flutter_local_notifications
  • 2024年了,TCP分析工具有哪些?
  • 力扣-Hot100-链表其一【算法学习day.34】
  • websocket身份验证
  • 网络技术-定义配置ACL规则的语法和命令
  • 学了Arcgis的水文分析——捕捉倾泻点,河流提取与河网分级,3D图层转要素失败的解决方法,测量学综合实习网站存着
  • htm + vue + quill 富文本编辑器案例
  • ubuntu连接orangepi-zero-2w桌面的几种方法
  • 【逐行注释】三维容积卡尔曼滤波(CKF)的MATLAB例程,附下载链接
  • 探秘Spring Boot中的@Conditional注解
  • 千帆启航,人才先行 | 讯方技术HarmonyOS人才训练营