代碼隨想錄算法訓練營第二天|【數組】977.有序數組的平方

題目

給你一個按 非遞減順序 排序的整數數組 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 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 已按 非遞減順序 排序

進階:

請你設計時間復雜度為 O(n) 的算法解決本問題

注意

  1. 是有序數組
  2. 主要是考慮到負數平方和可能會大于正數平方
  3. 數組平方的最大值就在數組的兩端,不是最左邊就是最右邊,不可能是中間

雙指針法思路

i指向起始位置,j指向終止位置。

定義一個新數組result,和A數組一樣的大小,讓k指向result數組終止位置。

如果A[i] * A[i] < A[j] * A[j] 那么result[k–] = A[j] * A[j]; 。

如果A[i] * A[i] >= A[j] * A[j] 那么result[k–] = A[i] * A[i]; 。

求解

(版本一)雙指針法
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:l, r, i = 0, len(nums)-1, len(nums)-1res = [float('inf')] * len(nums) # 需要提前定義列表,存放結果while l <= r:if nums[l] ** 2 < nums[r] ** 2: # 左右邊界進行對比,找出最大值res[i] = nums[r] ** 2r -= 1 # 右指針往左移動else:res[i] = nums[l] ** 2l += 1 # 左指針往右移動i -= 1 # 存放結果的指針需要往前平移一位return res
(版本二)暴力排序法
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:for i in range(len(nums)):nums[i] *= nums[i]nums.sort()return nums
(版本三)暴力排序法+列表推導法
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:return sorted(x*x for x in nums)
(版本四) 雙指針+ 反轉列表
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:#根據list的先進排序在先原則#將nums的平方按從大到小的順序添加進新的list#最后反轉listnew_list = []left, right = 0 , len(nums) -1while left <= right:if abs(nums[left]) <= abs(nums[right]):new_list.append(nums[right] ** 2)right -= 1else:new_list.append(nums[left] ** 2)left += 1return new_list[::-1]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40716.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改頭文件版本需要修改的文件

以修改ui的頭文件版本為例&#xff0c;還需要同時更新 PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include\dsp PJ10PC20240120041_c928\components\master-t5\hikauto\incl…

C# Halcon目標檢測算法

在Halcon中進行目標檢測可以使用傳統的計算機視覺方法&#xff0c;也可以使用深度學習的方法。Halcon提供了豐富的函數庫來處理這些任務&#xff0c;而在C#中使用Halcon&#xff0c;你需要通過Halcon .NET接口。 以下是使用Halcon進行目標檢測的一般步驟&#xff0c;這里我將給…

DDL:針對于數據庫、數據表、數據字段的操作

數據庫的操作 # 查詢所有數據 SHOW DATABASE; #創建數據庫 CREATE DATABASE 2404javaee; #刪除數據庫 DROP DATABASE 2404javaee; 數據表的操作 #創建表 CREATE TABLE s_student( name VARCHAR(64), s_sex VARCHAR(32), age INT(3), salary FLOAT(8,2), c_course VARC…

Windows 的 MFC開發的使用示例——講得挺好的

【Visual Studio 2019】創建 MFC 桌面程序 ( 安裝 MFC 開發組件 | 創建 MFC 應用 | MFC 應用窗口編輯 | 為按鈕添加點擊事件 | 修改按鈕文字 | 打開應用 )-騰訊云開發者社區-騰訊云 (tencent.com)

【算法】(C語言):堆排序

堆&#xff08;二叉樹的應用&#xff09;&#xff1a; 完全二叉樹。最大堆&#xff1a;每個節點比子樹所有節點的數值都大&#xff0c;根節點是最大值。父子索引號關系&#xff08;根節點為0&#xff09;&#xff1a;&#xff08;向上&#xff09;子節點x&#xff0c;父節點(x…

datawhale大模型應用開發夏令營學習筆記一

參考自 基于LangChainLLM的本地知識庫問答&#xff1a;從企業單文檔問答到批量文檔問答datawhale的llm-universe 作者現在在datawhale夏令營的大模型應用開發這個班中&#xff0c;作為一個小白&#xff0c;為了能為團隊做出一點貢獻&#xff0c;現在就要開始學習怎么使用langch…

實戰教程:如何用JavaScript構建一個功能強大的音樂播放器,兼容本地與在線資源

項目地址&#xff1a;Music Player App 作者&#xff1a;Reza Mehdikhanlou 視頻地址&#xff1a;youtube 我將向您展示如何使用 javascript 編寫音樂播放器。我們創建一個項目&#xff0c;您可以使用 javascript 從本地文件夾或任何 url 播放音頻文件。 項目目錄 assets 1…

頂級10大AI測試工具

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

暑期編程預習指南

暑期編程預習指南 高考結束后&#xff0c;迎來的是一段難得的假期時光。對于那些有志于踏入IT領域的高考生來說&#xff0c;這段時間無疑是一個重要的起點。為了幫助你們更好地利用這個假期&#xff0c;為未來的學習和職業生涯打下堅實的基礎&#xff0c;特此提供一份編程預習…

JWT入門

JWT與TOKEN JWT&#xff08;JSON Web Token&#xff09;是一種基于 JSON 格式的輕量級安全令牌&#xff0c;通常用于在網絡應用間安全地傳遞信息。而“token”一詞則是一個更廣泛的術語&#xff0c;用來指代任何形式的令牌&#xff0c;用于在計算機系統中進行身份驗證或授權。J…

【?講解下Laravel為什么會成為最優雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

cloudreve 設置開機服務

創建一個Systemd服務文件&#xff1a; 打開終端并創建一個新的服務文件&#xff1a; sudo nano /etc/systemd/system/cloudreve.service 在服務文件中添加以下內容&#xff1a; 根據你的設置調整路徑和參數&#xff0c;然后將以下配置粘貼到文件中&#xff1a; [Unit] Descri…

Django學習第四天

啟動項目命令 python manage.py runserver 分頁功能封裝到類中去 封裝的類的代碼 """ 自定義的分頁組件,以后如果想要使用這個分頁組件&#xff0c;你需要做&#xff1a; def pretty_list(request):# 靚號列表data_dict {}search_data request.GET.get(q, &…

Excel為數據繪制拆線圖,并將均值線疊加在圖上,以及整個過程的區域錄屏python腳本

Excel為數據繪制拆線圖,并將均值線疊加在圖上,以及整個過程的區域錄屏python腳本 1.演示動畫A.視頻B.gif動畫 2.跟蹤鼠標區域的錄屏腳本 Excel中有一組數據,希望畫出曲線,并且能把均值線也繪制在圖上,以下動畫演示了整個過程,并且提供了區域錄屏腳本,原理如下: 為節約空間,避免…

從華為和特斯拉之爭,看智能駕駛的未來

“一旦特斯拉完全解決自動駕駛問題并量產Optimus&#xff0c;任何空頭都將被消滅&#xff0c;即使是比爾-蓋茨也不例外。”7月2日&#xff0c;馬斯克再次在社交媒體X上畫下了這樣的“大餅”。 與此同時&#xff0c;特斯拉的股價在最近的三個交易日也迎來了24%的漲幅&#xff0c…

中俄汽車產業鏈合作前景廣闊,東方經濟論壇助力雙邊合作與創新

隨著中國汽車零部件企業的競爭力和創新能力不斷增強&#xff0c;中國汽車及零部件行業在俄羅斯的市場份額和品牌影響力顯著提升&#xff0c;中俄兩國在汽車產業鏈上的合作展現出巨大的潛力和廣闊的前景。2024年5月&#xff0c;俄羅斯乘用車新車銷量達到12.8萬輛&#xff0c;同比…

7.基于SpringBoot的SSMP整合案例-表現層開發

目錄 1.基于Restfu1進行表現層接口開發 1.1創建功能類 1.2基于Restful制作表現層接口 2.接收參數 2使用Apifox測試表現層接口功能 保存接口&#xff1a; 分頁接口&#xff1a; 3.表現層一致性處理 3.1先創建一個工具類&#xff0c;用作后端返回格式統一類&#xff1a;…

SpringMVC 的工作流程和詳細解釋

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于經典的 MVC 設計模式構建的&#xff0c;用于開發 Web 應用程序。下面是 Spring Boot MVC 的工作流程和詳細解釋&#xff1a; 1.客戶端發起請求 1.客戶端&#xff08;通常是瀏覽器&#xff09;發起 HTTP 請求…

招聘智能管理系統設計

設計一個招聘智能管理系統&#xff0c;需要從多個維度考慮&#xff0c;包括但不限于用戶界面、功能模塊、數據安全、算法模型等。以下是一個基本的設計框架&#xff1a; 1. 系統架構&#xff1a; 前端&#xff1a;提供直觀的用戶界面&#xff0c;包括應聘者和招聘者的登錄/注冊…

Python學習篇:Python基礎知識(三)

目錄 1 Python保留字 2 注釋 3 行與縮進 ?編輯4 多行語句 5 輸入和輸出 6 變量 7 數據類型 8 類型轉換 9 表達式 10 運算符 1 Python保留字 Python保留字&#xff08;也稱為關鍵字&#xff09;是Python編程語言中預定義的、具有特殊含義的標識符。這些保留字不能用作…