排序題目:三個數的最大乘積

文章目錄

  • 題目
    • 標題和出處
    • 難度
    • 題目描述
      • 要求
      • 示例
      • 數據范圍
  • 解法一
    • 思路和算法
    • 代碼
    • 復雜度分析
  • 解法二
    • 思路和算法
    • 代碼
    • 復雜度分析

題目

標題和出處

標題:三個數的最大乘積

出處:628. 三個數的最大乘積

難度

3 級

題目描述

要求

給定一個整數數組 nums \texttt{nums} nums,在數組中找出三個數,使得這三個數的乘積最大,并返回最大乘積。

示例

示例 1:

輸入: nums = [1,2,3] \texttt{nums = [1,2,3]} nums?=?[1,2,3]
輸出: 6 \texttt{6} 6

示例 2:

輸入: nums = [1,2,3,4] \texttt{nums = [1,2,3,4]} nums?=?[1,2,3,4]
輸出: 24 \texttt{24} 24

示例 3:

輸入: nums = [-1,-2,-3] \texttt{nums = [-1,-2,-3]} nums?=?[-1,-2,-3]
輸出: -6 \texttt{-6} -6

數據范圍

  • 3 ≤ nums.length ≤ 10 4 \texttt{3} \le \texttt{nums.length} \le \texttt{10}^\texttt{4} 3nums.length104
  • -1000 ≤ nums[i] ≤ 1000 \texttt{-1000} \le \texttt{nums[i]} \le \texttt{1000} -1000nums[i]1000

解法一

思路和算法

由于數組 nums \textit{nums} nums 中可能存在正數、零與負數,因此需要考慮當乘積最大時的三個數的所有可能情況。

  • 如果數組中的所有元素都是非負數,則任意三個數的乘積都是非負數,數組中的最大三個數的乘積即為最大乘積。

  • 如果數組中的所有元素都是負數,則任意三個數的乘積都是負數,為了使乘積最大應該使乘積的絕對值最小,數組中的最大三個數即為絕對值最小的三個數,乘積即為最大乘積。

  • 如果數組中同時有非負數與負數,則根據負數的個數,有兩種可能的情況。

    • 如果數組中至少有兩個負數,則當乘積最大時,最大乘積一定是非負數。可能選三個最大的非負數,也可能選一個最大的非負數與兩個最小的負數(即兩個絕對值最大的負數)。

    • 如果數組中只有一個負數,則任意三個數中至少有兩個非負數,當乘積最大時,一定是選數組中的最大三個數。

根據上述分析可知,當乘積最大時,三個數的可能情況有兩種,一是選數組中最大的三個數,二是選數組中最大的一個數與最小的兩個數。對于這兩種情況分別計算乘積,返回最大乘積。

代碼

class Solution {public int maximumProduct(int[] nums) {Arrays.sort(nums);int length = nums.length;return Math.max(nums[length - 3] * nums[length - 2] * nums[length - 1], nums[0] * nums[1] * nums[length - 1]);}
}

復雜度分析

  • 時間復雜度: O ( n log ? n ) O(n \log n) O(nlogn),其中 n n n 是數組 nums \textit{nums} nums 的長度。排序需要 O ( n log ? n ) O(n \log n) O(nlogn) 的時間。

  • 空間復雜度: O ( log ? n ) O(\log n) O(logn),其中 n n n 是數組 nums \textit{nums} nums 的長度。排序需要 O ( log ? n ) O(\log n) O(logn) 的遞歸調用棧空間。

解法二

思路和算法

由于計算最大乘積只需要得到數組中最大的三個元素與最小的兩個元素,并不需要得到所有元素的順序,因此可以直接遍歷數組找到最大的兩個元素。

遍歷數組 nums \textit{nums} nums,遍歷過程中維護最大的三個元素與最小的兩個元素,對于每個元素 num \textit{num} num,與最大的三個元素以及最小的兩個元素比較,并更新相應的元素值。遍歷結束之后,即可得到最大的三個元素與最小的兩個元素,并計算最大乘積。

代碼

class Solution {public int maximumProduct(int[] nums) {int firstMax = Integer.MIN_VALUE, secondMax = Integer.MIN_VALUE, thirdMax = Integer.MIN_VALUE;int firstMin = Integer.MAX_VALUE, secondMin = Integer.MAX_VALUE;for (int num : nums) {if (num > firstMax) {thirdMax = secondMax;secondMax = firstMax;firstMax = num;} else if (num > secondMax) {thirdMax = secondMax;secondMax = num;} else if (num > thirdMax) {thirdMax = num;}if (num < firstMin) {secondMin = firstMin;firstMin = num;} else if (num < secondMin) {secondMin = num;}}return Math.max(thirdMax * secondMax * firstMax, firstMin * secondMin * firstMax);}
}

復雜度分析

  • 時間復雜度: O ( n ) O(n) O(n),其中 n n n 是數組 nums \textit{nums} nums 的長度。需要遍歷數組一次。

  • 空間復雜度: O ( 1 ) O(1) O(1)

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

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

相關文章

fastadmin最新版導出數據時 表格中會有 html標簽的解決辦法

fastadmin 自帶的導出方法&#xff0c; 是一個純前端的導出&#xff0c; 沒有請求后臺的接口 當我們使用導出功能時&#xff0c; 有些數據&#xff0c; 我們在設計的時候&#xff0c;配置的是 枚舉類型的 但是當我們導出數據的時候&#xff0c; 居然導出的數據中帶有 html 的…

使用el-col和el-row布局,有版心,一頁有兩欄布局 三欄布局 四欄布局 使用vue動態渲染元素

使用Vue結合Element UI的el-row和el-col組件來實現版心布局&#xff0c;并動態渲染不同欄數的布局&#xff0c;可以通過以下步驟實現&#xff1a; 定義版心容器&#xff1a;使用el-container來定義整個頁面的容器&#xff0c;其中el-header、el-main、el-footer分別定義頭部、主…

k8s-第十節-Ingress

Ingress 介紹 Ingress 為外部訪問集群提供了一個 統一 入口&#xff0c;避免了對外暴露集群端口&#xff1b;功能類似 Nginx&#xff0c;可以根據域名、路徑把請求轉發到不同的 Service。可以配置 https 跟 LoadBalancer 有什么區別&#xff1f; LoadBalancer 需要對外暴露…

Promise解決異步編程問題

一個典型的異步編程問題&#xff1a;即您嘗試在循環中發起多個異步請求&#xff0c;并希望在所有請求都完成后執行某些操作。然而&#xff0c;由于JavaScript的異步性質&#xff0c;num和total的比較在循環結束時立即執行&#xff0c;而不是在所有請求都完成后執行。這可能導致…

【12321騷擾電話舉報受理中心-短信驗證安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞…

開發常識:命令行終端、庫源碼、開發環境階段

目錄 命令行終端 集成開發環境&#xff08;IDE &#xff09;&#xff1a;有插件校驗等限制&#xff0c;成功率低于操作系統 庫源碼 github上搜 官網 UNPKG托管開源的包 專業名詞 環境 開發&#xff1a;本地機 開發和調試 生產&#xff1a;最終部署 測試&#xff1a;…

交流負載箱的主要功能有哪些?

交流負載箱可以模擬各種實際用電設備的功率、電流、電壓等參數&#xff0c;使得電源系統在運行過程中能夠承受實際負載的考驗&#xff0c;確保電源系統的穩定運行。通過交流負載箱對電源設備進行測試&#xff0c;可以檢測出電源設備在過載、短路等異常情況下的保護功能是否正常…

Linux和mysql中的基礎知識

cpu讀取的指令大部分在內存中&#xff08;不考慮緩存&#xff09; 任何程序在運行之前都的加入到內存。 eip->pc指針&#xff0c;指明當前指令在什么位置。 代碼大概率是從上往下執行的&#xff0c;基于這樣的基本理論。既可以將一部分指令加載到CPU對應的緩存中&#xf…

解決zip文件中文亂碼問題

后臺微服務運行在linux環境里&#xff0c;前端Vue。在一個項目中&#xff0c;把后臺的文件打包成zip&#xff0c;下載到前臺。結果發現zip文件名本身亂碼&#xff0c;zip文件內壓縮的文件也是亂碼。所謂亂碼&#xff0c;程序員都見過&#xff0c;就是中文變成了亂七八糟的字符。…

【CSAPP】-datalab實驗

實驗原理與內容 本實驗每位學生拿到一個datalab-handout.tar文件。學生可以通過U盤、網盤、虛擬機共享文件等方式將其導入到Unbuntu實驗環境中&#xff0c;選擇合適位置存放。然后在Ubuntu環境下解壓。解壓后&#xff0c;根據文件中的敘述和要求更改bits.c文件。本次實驗的主要…

【全網最全】2024年APMCM第十四屆亞太地區大學生數學建模競賽(中文賽項)完整思路解析+代碼+論文

我是Tina表姐&#xff0c;畢業于中國人民大學&#xff0c;對數學建模的熱愛讓我在這一領域深耕多年。我的建模思路已經幫助了百余位學習者和參賽者在數學建模的道路上取得了顯著的進步和成就。現在&#xff0c;我將這份寶貴的經驗和知識凝練成一份全面的解題思路與代碼論文集合…

云計算【第一階段(26)】Linux網絡設置

一、查看網絡配置 1.查看網絡接口信息ifconfig 查看所有活動的網絡接口信息 2.ifconfig命令 查看指定網絡接口信息 ifconfig 網絡接口 &#xff08;1&#xff09;第一行&#xff1a;以太網卡的名字 ens33其中en代表以太網卡&#xff0c; centos6的是eth0&#xff0c; e…

本地maven倉庫向遠程倉庫部署jar包

使用mvn命令即可&#xff0c;如下 mvn deploy:deploy-file \ -DgroupIdtop.rdfa.auth \ -DartifactIdrdfa-auth-spring-mvc-starter \ -Dversion3.0.0-20230718-RELEASE \ -Dpackagingjar \ -Dfile/Users/panmeng/Documents/repository/top/rdfa/auth/rdf…

中國算力網絡市場發展分析

中國算力網絡市場發展現狀 算力涵蓋計算、內存、存儲等全方位能力&#xff0c;廣泛分布于網絡邊緣、云計算中心、聯網設備及轉發節點。隨著數字化技術革新&#xff0c;算力與網絡正深度融合&#xff0c;推動“算網一體化”的演進。這一新型基礎設施日漸凸顯其重要性&#xff0c…

精準畜牧業:多維傳感監測及分析動物采食行為

全球畜牧業呈現出一個動態且復雜的挑戰。近幾十年來&#xff0c;它根據對動物產品需求的演變進行了適應&#xff0c;動物生產系統需要提高其效率和環境可持續性。在不同的畜牧系統中有效行動取決于科學技術的進步&#xff0c;這允許增加照顧動物健康和福祉的數量。精準畜牧業技…

numpy庫(python)

文章目錄 1.numpy簡介2.安裝numpy3.ndarry : numpy庫的心臟3.1 創建數組3.2數據類型3.3dtype NumPy是用Python.進行科學計算&#xff0c;尤其是數據分析時&#xff0c;所用到的一個基礎庫。它是大量Python 數學和科學計算包的基礎&#xff0c;比如后面要講到的pandas)庫就用到了…

前端面試題_Css

一、說一下Css的盒子模型&#xff1f; HTML中所有元素都可以看成是一個盒子 盒子的組成&#xff1a;content、padding、border、margin 盒子的類型&#xff1a; 標準盒模型&#xff1a;marginborderpaddingcontent -- box-sizing&#xff1a;content-box&#xff08;默認&a…

Samtec汽車電子 | 汽車連接器如何在高要求、極端的環境中工作

【摘要/前言】 汽車電子&#xff0c;這些年來始終是極具流量的熱門話題&#xff0c;目前不斷發展的智能座駕、輔助駕駛等賽道都是對相關產業鏈需求的進一步刺激&#xff0c;這里蘊含著一片廣闊的市場。 同樣&#xff0c;廣闊的市場里有著極高的準入門檻和事關安全的技術挑戰。…

【AI】研發人員的《生存還是毀滅?》

AI在當前技術和社會環境下被視為一種強大的工具和輔助資源&#xff0c;而非一種取代人類開發者的替代品。在本文中&#xff0c;我們將詳細探討AI在多個領域的應用&#xff0c;如何與開發者相互作用&#xff0c;并分析AI對開發者角色的影響和未來的發展趨勢。 引言 人工智能&a…

Windows安全認證機制——Windows常見協議

一.LLMNR協議 1.LLMNR簡介 鏈路本地多播名稱解析&#xff08;LLMNR&#xff09;是一個基于域名系統&#xff08;DNS&#xff09;數據包格式的協議&#xff0c;使用此協議可以解析局域網中本地鏈路上的主機名稱。它可以很好地支持IPv4和IPv6&#xff0c;是僅次于DNS解析的名稱…