最大兩數的乘積 Leetcode 1464 Max Product of Two Elements in Array

閱讀時間約 3 分鐘

題目敘述

題目會給定一個整數陣列nums,要求我們找出最大的兩個整數a, b,返回(a-1) * (b-1)的乘積。

詳細的題目可在這裡看到


測試範例

Example 1:

Input: nums = [3,4,5,2]
Output: 12
Explanation: If you choose the indices i=1 and j=2 (indexed from 0), you will get the maximum value, that is, (nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12.

Example 2:

Input: nums = [1,5,4,5]
Output: 16
Explanation: Choosing the indices i=1 and j=3 (indexed from 0), you will get the maximum value of (5-1)*(5-1) = 16.

Example 3:

Input: nums = [3,7]
Output: 12

約束條件

Constraints:

  • 2 <= nums.length <= 500
  • 1 <= nums[i] <= 10^3

演算法

第一直覺可能會想到先排序,再取最大的前兩個數字。

但是,其實不用排序,我們需要的只有前兩個最大的元素,分別用兩個變數first, second去記錄最大值 和 第二大的值,分別減一再相乘即可。


程式碼

cclass Solution(object):
 def maxProduct(self, nums):

  first, second = 0, 0
  
  for number in nums:
   
   if number > first:
    # update first largest and second largest
    first, second = number, first
    
   elif number > second:
    # update second largest
    second = number
  
  return (first - 1) * (second - 1)

複雜度分析

時間複雜度:

O( n ) 一次從左到右的線性掃描,長度和原本的陣列一樣長。

空間複雜度:

O( 1 ) 使用到的是固定大小的臨時變數,所佔用空間為常數級別。


關鍵知識點:

陣列的輸入資料打散的前提下,當所求為前K大或前K小的元素時,
聯想到O(n)時間的線性掃描演算法。
不需要真的去排序,省下整個陣列排序的成本O(n log n)。


Reference:

[1] Python/JS/Go/C++ O(n) by linear scan. [w/ Comment] - Maximum Product of Two Elements in an Array - LeetCode

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 題目會給我們一個字串,要求我們連三碼相同的數字,最大值是多少? 例如 給定輸入="1111222555333",最大值是555 如果無解,則返回空字串"" 英文版的題目敘述在這裡
題目敘述 題目會給我們一張Activity資料表,裡面分別有user_id、 session_id、activity_date 、activity_type等欄位。 要求我們列出所有過去30天的活躍使用者。 活躍使用者的定義為2019-07-27包含這天,往前三十天的區間內,至少有過一次活動紀錄
題目敘述 題目會給我們一張World資料表,裡面分別有name、 continent、area、population 、gdp等欄位,其中name 是主鍵Primary Key。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
題目敘述 題目會給我們一張Customer資料表,裡面分別有id、name、referee_id 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID referee_id不等於2的顧客,印出順序不拘。
題目敘述 題目會給我們一個整數,要求我們計算出這個整數的二進位表示法裡面,有幾個bit1? 例如 5 = 二進位的 101 => 有2個 bit1,答案為2 英文版的題目敘述在這裡
題目敘述 題目會給我們一個字串,要求我們連三碼相同的數字,最大值是多少? 例如 給定輸入="1111222555333",最大值是555 如果無解,則返回空字串"" 英文版的題目敘述在這裡
題目敘述 題目會給我們一張Activity資料表,裡面分別有user_id、 session_id、activity_date 、activity_type等欄位。 要求我們列出所有過去30天的活躍使用者。 活躍使用者的定義為2019-07-27包含這天,往前三十天的區間內,至少有過一次活動紀錄
題目敘述 題目會給我們一張World資料表,裡面分別有name、 continent、area、population 、gdp等欄位,其中name 是主鍵Primary Key。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
題目敘述 題目會給我們一張Customer資料表,裡面分別有id、name、referee_id 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID referee_id不等於2的顧客,印出順序不拘。
題目敘述 題目會給我們一個整數,要求我們計算出這個整數的二進位表示法裡面,有幾個bit1? 例如 5 = 二進位的 101 => 有2個 bit1,答案為2 英文版的題目敘述在這裡
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
專案項目:兩數最大公因數判斷 邏輯思維:當按下計算按鈕,如果兩個文字輸入盒當中,只要有一個沒有輸入數字,則判斷為真,顯示提示訊息,否則執行最大公因數的判斷。
Thumbnail
【11/23盤前重點新聞】 *感恩節前夕 OPEC+延遲產量 道瓊收紅近190點 *美上周初領失業金人數降至20.9萬 創6月來最大降幅 *OPEC+意外宣布會議延後4天舉行 油價重挫逾4% *飯店業尾牙商機大爆發 解封效應 金融、科技業擴大舉辦
Thumbnail
# 分科測驗數甲考題深入 計算量大考生吃力 昨天,二、三類組分科測驗正式開考,其中數學甲科是許多熱門科系的重要考科。根據補教老師和教師的分析,今年的數甲考題相對深入,計算量也是歷年最大,考生需要有紮實的基礎和靈活的思維才能順利解題。 今年的數甲考題共有兩組,每組有十五題,其中單選題五
Thumbnail
前言 大家好,最近訂閱數突然增加很多,因此趕緊來開下這堂課,讓大家一起運用(衝一下人氣XD)。首先,大家投資的目的是為了什麼?我想八九不離十就是為了賺錢。在我分享賺錢策略的過程中,我發現投資對於散戶有兩位男士(難事),第一個難事是「找到」會賺的策略,第二個難事是「遵循」會賺的策略。 第一個難事,「找
Thumbnail
手機是全球電子產業的重要消費級產品,對於以電子業為主的台灣來說更是重中之重。 兩天前,國際數據資訊公司IDC發布了一份關於手機出貨量的評估報告,出貨量達有史以來最大降幅,內容並不樂觀。 讓我來為你解讀這份報告,一起來看看吧!
Thumbnail
資產配置是一種由上而下的策略,從股債比開始到各區塊ETF的標的選擇,最終形成一個投資組合與計畫。 個股投資是一種由下而上的策略,從財報分析或技術線形的一種選股技巧,最終形成一個投資組合與計畫。 由上而下與由下而上的投資策略兩者最大的差別在於:
Thumbnail
我們把時間定在1911—2011這一百年間,最具代表性人物作品,包含了渡海三家張大千、黃君璧、漙心畬,及台灣在地享譽國際的廖繼春、李錫奇、劉國松⋯等大師,共有一百四十四位大師,及他們的一百六十六幅作品,涵蓋了水墨、油畫、現代抽象等類型的畫作,呈現在世人面前,可謂前無古人 後無來者!
Thumbnail
探討完與機車市場有直接相關的數據後,接著探討間接數據。本篇這次希望從近幾年的新掛牌資料中,找出歷年新掛牌數最高與最低的月份,過程看與其他數據是否有其相關性。發現每年的新掛牌數高峰值為9月(考照及格人數)與12月(購車輔助截止),年初則會回落低谷,來到年度最低。其中,農曆七月也會對新掛牌數有些許影響。
Thumbnail
搜尋巨頭谷歌的母公司 Alphabet (公司代碼 GOOG),在七月底發佈了今年 2021 第二季的財報,結果遠超市場和分析師的預期,淨利甚至創下有史以來的最高紀錄。而谷歌的 EPS也比分析師預估的平均值高了四成左右,整體表現也被視為優於FB等競爭對手。
Thumbnail
本文介紹了兩個我改變我人生的兩個軟體,Notion及Arduino,帶我進入不同的世界。你,也找到改變人生的軟體了嗎?
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
專案項目:兩數最大公因數判斷 邏輯思維:當按下計算按鈕,如果兩個文字輸入盒當中,只要有一個沒有輸入數字,則判斷為真,顯示提示訊息,否則執行最大公因數的判斷。
Thumbnail
【11/23盤前重點新聞】 *感恩節前夕 OPEC+延遲產量 道瓊收紅近190點 *美上周初領失業金人數降至20.9萬 創6月來最大降幅 *OPEC+意外宣布會議延後4天舉行 油價重挫逾4% *飯店業尾牙商機大爆發 解封效應 金融、科技業擴大舉辦
Thumbnail
# 分科測驗數甲考題深入 計算量大考生吃力 昨天,二、三類組分科測驗正式開考,其中數學甲科是許多熱門科系的重要考科。根據補教老師和教師的分析,今年的數甲考題相對深入,計算量也是歷年最大,考生需要有紮實的基礎和靈活的思維才能順利解題。 今年的數甲考題共有兩組,每組有十五題,其中單選題五
Thumbnail
前言 大家好,最近訂閱數突然增加很多,因此趕緊來開下這堂課,讓大家一起運用(衝一下人氣XD)。首先,大家投資的目的是為了什麼?我想八九不離十就是為了賺錢。在我分享賺錢策略的過程中,我發現投資對於散戶有兩位男士(難事),第一個難事是「找到」會賺的策略,第二個難事是「遵循」會賺的策略。 第一個難事,「找
Thumbnail
手機是全球電子產業的重要消費級產品,對於以電子業為主的台灣來說更是重中之重。 兩天前,國際數據資訊公司IDC發布了一份關於手機出貨量的評估報告,出貨量達有史以來最大降幅,內容並不樂觀。 讓我來為你解讀這份報告,一起來看看吧!
Thumbnail
資產配置是一種由上而下的策略,從股債比開始到各區塊ETF的標的選擇,最終形成一個投資組合與計畫。 個股投資是一種由下而上的策略,從財報分析或技術線形的一種選股技巧,最終形成一個投資組合與計畫。 由上而下與由下而上的投資策略兩者最大的差別在於:
Thumbnail
我們把時間定在1911—2011這一百年間,最具代表性人物作品,包含了渡海三家張大千、黃君璧、漙心畬,及台灣在地享譽國際的廖繼春、李錫奇、劉國松⋯等大師,共有一百四十四位大師,及他們的一百六十六幅作品,涵蓋了水墨、油畫、現代抽象等類型的畫作,呈現在世人面前,可謂前無古人 後無來者!
Thumbnail
探討完與機車市場有直接相關的數據後,接著探討間接數據。本篇這次希望從近幾年的新掛牌資料中,找出歷年新掛牌數最高與最低的月份,過程看與其他數據是否有其相關性。發現每年的新掛牌數高峰值為9月(考照及格人數)與12月(購車輔助截止),年初則會回落低谷,來到年度最低。其中,農曆七月也會對新掛牌數有些許影響。
Thumbnail
搜尋巨頭谷歌的母公司 Alphabet (公司代碼 GOOG),在七月底發佈了今年 2021 第二季的財報,結果遠超市場和分析師的預期,淨利甚至創下有史以來的最高紀錄。而谷歌的 EPS也比分析師預估的平均值高了四成左右,整體表現也被視為優於FB等競爭對手。
Thumbnail
本文介紹了兩個我改變我人生的兩個軟體,Notion及Arduino,帶我進入不同的世界。你,也找到改變人生的軟體了嗎?