java数据结构与算法刷题-----LeetCode977. 有序数组的平方

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

在这里插入图片描述

1. 时间复杂度 = 空间复杂度 = O(n * l o g 2 n log_2{n} log2n)

解题思路
  1. 最直接的想法就是先算出每个元素的平方和,然后排序,所以排序的效率就是这个算法的效率。那么目前综合性能比最好,实现也简单的就是快速排序算法,它的时间和空间复杂度为O(n * l o g 2 n log_2{n} log2n)
快速排序https://blog.csdn.net/grd_java/article/details/135671368
代码:时间复杂度O(n * l o g 2 n log_2{n} log2n).空间复杂度O(n * l o g 2 n log_2{n} log2n)

在这里插入图片描述

class Solution {public int[] sortedSquares(int[] nums) {for (int i = 0; i < nums.length; i++) {nums[i] = (int)Math.pow(nums[i],2.0);}
//        quickSort(nums);Arrays.sort(nums);return nums;}/**快速排序,不稳定,时间复杂度O(n * logn) 空间复杂度O(n*logn)* 这里是快排入口*/public void quickSort(int arr[]){quickSort(arr,0,arr.length-1);}/*** 递归主要用于分割左右两个表*/public void quickSort(int arr[],int low,int high){if(low<high){//如果左指针超过右指针,表示本次比较完成//快速排序,每一趟都会确定一个元素的最终位置,用pivot表示,pivot是枢纽的意思int pivotPosition = quickSortPartition(arr, low, high);//由pivot为分界点,分成左右两个表quickSort(arr,low,pivotPosition-1);//左表排序quickSort(arr,pivotPosition+1,high);//右表排序}}/*** 这里是每一趟的快速排序代码,指定一个元素作为枢纽pivot,然后以它为中心,小的元素放在它左边,大的放在它右边*/public int quickSortPartition(int arr[],int low,int high){int pivot = arr[low];//指定枢纽while (low<high){while(low<high && arr[high]>=pivot) --high;//从右边找到比枢纽小的arr[low] = arr[high];//放在左边while(low<high && arr[low]<=pivot) ++low;//从左找到比枢纽大的arr[high] = arr[low];//放在右边}arr[low] = pivot;//最终将枢纽放到它最终的位置return low;//最终low指向枢纽最终位置}
}

2. 时间复杂度O(n),空间复杂度O(1)

其实直接用排序算法,有些太奢侈了,而上面快速排序主要用双指针的思想。那么我们直接用双指针做这道题,是不是更好呢?
在这里插入图片描述

代码:时间复杂度O(n).空间复杂度O(1)

在这里插入图片描述

class Solution {public int[] sortedSquares(int[] nums) {int n = nums.length;//数组长度int low = 0, high = n -1;//左右指针int position = n-1;//答案数组的指针,从后向前,依次指向插入元素的位置int[] answer = new int[n];//每次都将较大值从后向前插入position指向的位置while(high >= low){int leftPow = nums[low]*nums[low];//获取边的平方和int rightPow = nums[high] * nums[high];//获取右边的平方和//将较大的插入answer数组,并移动指针if(leftPow > rightPow) {answer[position] = leftPow; low++;}//左边的插入answer,左指针向右移else {answer[position] = rightPow; high--;}//右边元素插入answer,右指针向左移动position --;//指向下一个插入位置,从后往前依次插入}return answer;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/411843.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式开发--STM32G4系列片上FLASH的读写

这个玩意吧&#xff0c;说起来很简单&#xff0c;就是几行代码的事&#xff0c;但楞是折腾了我大半天时间才搞定。原因后面说&#xff0c;先看代码吧&#xff1a; 读操作 读操作很简单&#xff0c;以32位方式读取的时候是这样的&#xff1a; data *(__IO uint32_t *)(0x080…

Elasticsearch:聊天机器人教程(一)

在本教程中&#xff0c;你将构建一个大型语言模型 (LLM) 聊天机器人&#xff0c;该机器人使用称为检索增强生成 (RAG) 的模式。 使用 RAG 构建的聊天机器人可以克服 ChatGPT 等通用会话模型所具有的一些限制。 特别是&#xff0c;他们能够讨论和回答以下问题&#xff1a; 你的…

【办公技巧】EXCEL表格如何设置只读权限?

Excel表格中保存着重要的数据&#xff0c;想要达到只能查看不能编辑的效果&#xff0c;我们可以给excel表格设置为只读权限&#xff0c;Excel文件想要设置为只读的方法有很多&#xff0c;今天分享四种方法给大家&#xff1a; 方法一&#xff1a;文件属性 右键点击文件&#x…

sentinel熔断与限流

文章目录 一、sentinel简介Sentinel 是什么&#xff1f;Sentinel安装 二、sentinel整合工程新建cloudalibaba-sentinel-service8401微服务引入依赖yml配置主启动类添加EnableDiscoveryClient业务类测试 三、sentinel流控规则基本介绍流控模式直接&#xff08;默认&#xff09;关…

手机崩溃日志的查找与分析

手机崩溃日志的查找与分析 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和崩溃日志。同时还提供了崩溃日志的分析查看模块&#xff0c;可以对苹果崩溃日志进行符号化、格式化和分析&#x…

网页版短信平台介绍|短线系统搭建源码

网页版短信平台介绍|短线系统搭建源码 网页版短信平台是一种方便用户在电脑上发送和接收短信的工具。它提供了许多主要功能&#xff0c;使得用户能够更加高效地管理和使用短信服务。 网页版短信平台允许用户通过电脑直接发送短信。传统的手机短信发送通常需要使用手机键盘进行操…

第10章 通信业务

文章目录 10.1.1 通信行业1、通信行业的界定2、通信行业的特点 10.1.2 通信企业10.1.3 通信终端1、通信终端的分类2、终端发展趋势 10.2.1 通信业务的定义及分类10.2.2 基础电信业务1、第一类基础电信业务A11 固定通信业务A12 蜂窝移动通信业务A13 第一类卫星通信业务A14 第一类…

最全对象存储(云盘)挂载本地主机或服务器

1.对象存储介绍 1.1 分类 分布式存储的应用场景相对于其存储接口&#xff0c;现在流行分为三种: 块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在&#xff0c;这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口&#xff0c;块存储一般…

Smart Tomcat

Smart Tomcat插件可以让idea图形化界面让代码部署到tomcat上达成一键打包部署的过程 下面是idea安装使用Smart Tomcat的过程 我们直接在plugins(插件)里搜索Tomcat 然后下载第一个 然后点击Apply(应用) 在一个项目中 第一次使用时要进行配置Smart Tomcat Name 可以不配置…

清晰光谱空间:全自动可调波长系统的高光谱成像优势

高光谱成像技术 高光谱成像技术是一种捕获和分析宽波长信息的技术&#xff0c;能够对材料和特征进行详细的光谱分析和识别。高光谱成像技术的实现通过高光谱相机&#xff0c;其工作原理是使用多个光学传感器或光学滤波器分离不同波长的光&#xff0c;并捕获每个波段的图像&…

数据集成时表模型同步方法解析

01 背景介绍 数据治理的第一步&#xff0c;也是数据中台的一个基础功能 — 即将来自各类业务数据源的数据&#xff0c;同步集成至中台 ODS 层。业务数据源多种多样&#xff0c;单单可能涉及到的主流关系型数据库就有近十种。功能更加全面的数据中台通常还具有对接非关系型数据…

CSS||引入方式

目录 CSS引入方式 行内样式表&#xff08;行内式&#xff09; 内部样式表&#xff08;嵌入式&#xff09; 外部样式表&#xff08;链接式&#xff09; 引入外部样式表 CSS引入方式 CSS&#xff08;层叠样式表&#xff09;是一种用来描述文档样式的样式表语言&#xff0c;它…