第421場周賽:數組的最大因子得分、

Q1、數組的最大因子得分

1、題目描述

給你一個整數數組 nums

因子得分 定義為數組所有元素的最小公倍數(LCM)與最大公約數(GCD)的 乘積

最多 移除一個元素的情況下,返回 nums最大因子得分

注意,單個數字的 LCMGCD 都是其本身,而 空數組 的因子得分為 0。

2、解題思路

為了解決這個問題,我們將使用 前綴和后綴數組 的方法,動態計算移除每個元素后的因子得分。

  1. 數學性質

    1. 單個數字的 GCD 和 LCM

      • 對于單個數字 x,其 GCDLCM 都是 x,因此因子得分為 x × x = x 2 x \times x = x^2 x×x=x2
    2. 空數組的 GCD 和 LCM

      • 空數組的 GCD 和 LCM 均為 0,因此因子得分為 0。
    3. GCD 和 LCM 的計算公式

      • 最大公約數(GCD):gcd(a, b)

      • 最小公倍數(LCM):lcm(a, b) = a / gcd(a, b) * b

  2. 前綴和后綴數組

    為了高效地計算移除每個元素后的 GCD 和 LCM,我們使用前綴和后綴數組:

    1. 后綴數組
      • sufGCD[i] 表示從索引 i 到數組末尾所有元素的 GCD。
      • sufLCM[i] 表示從索引 i 到數組末尾所有元素的 LCM。
    2. 前綴變量
      • preGCD 表示從數組開頭到當前索引的 GCD。
      • preLCM 表示從數組開頭到當前索引的 LCM。

    利用前綴和后綴信息,我們可以在 O(1) 的時間內計算移除某個元素后的剩余數組的 GCD 和 LCM。

  3. 動態更新因子得分

  • 對于每個索引 i

    1. 計算移除元素 nums[i] 后,剩余數組的 GCD 和 LCM:

      ? $\text{remainingGCD} = \text{gcd(preGCD, sufGCD[i + 1])} $

      ? remainingLCM = lcm(preLCM,?sufLCM[i?+?1]) \text{remainingLCM} = \text{lcm(preLCM, sufLCM[i + 1])} remainingLCM=lcm(preLCM,?sufLCM[i?+?1])

    2. 更新最大因子得分:

      ? maxFactorScore = max ? ( maxFactorScore , remainingGCD × remainingLCM ) \text{maxFactorScore} = \max(\text{maxFactorScore}, \text{remainingGCD} \times \text{remainingLCM}) maxFactorScore=max(maxFactorScore,remainingGCD×remainingLCM)

    3. 更新前綴 GCD 和前綴 LCM。

3、代碼實現

class Solution {
public:long long maxScore(vector<int>& nums) {int n = nums.size();// 后綴數組:// sufGCD[i] 表示從索引 i 到末尾所有元素的 GCD// sufLCM[i] 表示從索引 i 到末尾所有元素的 LCMvector<int> sufGCD(n + 1, 0);       // 初始化為 0, 表示 GCDvector<long long> sufLCM(n + 1, 1); // 初始化為 1, 表示 LCM// 計算后綴 GCD 和后綴 LCMfor (int i = n - 1; i >= 0; i--) {sufGCD[i] = gcd(sufGCD[i + 1], nums[i]);sufLCM[i] = lcm(sufLCM[i + 1], nums[i]);}// 初始答案: 不移除任何元素時的因子得分long long maxFactorScore = static_cast<long long>(sufGCD[0]) * sufLCM[0];// 前綴變量: preGCD 和 preLCMint preGCD = 0;       // 前綴 GCD, 初始為 0long long preLCM = 1; // 前綴 LCM, 初始為 1// 枚舉每個元素作為移除目標for (int i = 0; i < n; i++) {// 移除 nums[i] 后, 剩余部分的 GCD 和 LCMint remainingGCD = gcd(preGCD, sufGCD[i + 1]);long long remainingLCM = lcm(preLCM, sufLCM[i + 1]);// 更新最大因子得分maxFactorScore = max(maxFactorScore, static_cast<long long>(remainingGCD) * remainingLCM);// 更新前綴 GCD 和前綴 LCMpreGCD = gcd(preGCD, nums[i]);preLCM = lcm(preLCM, nums[i]);}return maxFactorScore;}
};

4、復雜度分析

  1. 時間復雜度

    • 后綴數組計算需要 O(n)。

    • 遍歷每個元素更新前綴和計算剩余數組的 GCD 和 LCM,也需要 O(n)。

    • 總體復雜度為 O(n)。

  2. 空間復雜度

    • 使用了 sufGCDsufLCM 兩個數組,空間復雜度為 O(n)。

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

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

相關文章

機器學習(神經網絡基礎篇)——個人理解篇5(梯度下降中遇到的問題)

在神經網絡訓練中&#xff0c;計算參數的梯度是關鍵步驟。numerical_gradient 方法旨在通過數值微分&#xff08;中心差分法&#xff09;計算損失函數對網絡參數的梯度。然而&#xff0c;該方法的實現存在一個關鍵問題&#xff0c;導致梯度計算錯誤。 1、錯誤代碼示例&#xf…

40常用控件_WindowFrame的影響

window frame 的影響 如果 widget 作為一個窗口(帶有標題欄,最小化,最大化,關閉按鈕),那么在計算尺寸和坐標的 時候就有兩種算法.包含 window frame 和 不包含 window frame. 其中x(),y0,frameGeometry(), pos(),move() 都是按照包含 window frame 的方式來計算 的. 其中 geome…

Nginx搭建API網關服務教程-系統架構優化 API統一管理

超實用&#xff01;用Nginx搭建API網關服務&#xff0c;讓你的系統架構更穩更強大&#xff01;&#x1f680; 親們&#xff0c;今天來給大家種草一個超級實用的API網關搭建方案啦&#xff01;&#x1f440; 在如今的Web系統架構中&#xff0c;一個穩定、高性能、可擴展的API網…

USB設備老是提示有問題,如何解決

問題描述&#xff1a;有一臺usb設備一旦不小心碰了下&#xff0c;后面就在右下角提示“無法識別的USB設備”“跟這臺計算機連接的前一個USB設備0工作不正常&#xff0c;WIndows無法識別它”。我這個是明確知道那個設備&#xff0c;如果不知道也可以同樣解決。 解決方法&#xf…

數據操作語言

一、DML的核心操作類型 1.添加數據(INSERT) (1)手動插入:逐行插入數據,適用于少量數據。 INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);(2)批量導入:通過外部文件導入數據,適用于大數據場景

【Python】案例:計算股票收益率和波動率

【Python】案例&#xff1a;計算股票收益率和波動率&#xff1a; 1、案例需求2、數據準備3、案例實現 1、案例需求 在分析股票數據時&#xff0c;我們需要從這些數據中得到一些關鍵指標進行評估&#xff0c;比如收益率、波動率&#xff0c;其中收益率又可以細分為簡單收益率和…

geoserver搭建Docker一鍵直接安裝并上傳tif影像預覽

geoserver搭建Docker一鍵直接安裝 文章目錄 geoserver搭建Docker一鍵直接安裝前言一、Docker拉取Geoserver二、運行后使用geoserver進行數據管理進入geoserver調整語言登錄geoserver上傳一個tif影像建立工作空間并上傳自己的tif數據建立圖層預覽 總結 前言 使用docker安裝geos…

STM32看門狗應用實戰:獨立看門狗與窗口看門狗深度解析(下) | 零基礎入門STM32第九十五步

主題內容教學目的/擴展視頻看門狗什么是看門狗&#xff0c;原理分析&#xff0c;啟動喂狗方法&#xff0c;讀標志位。熟悉在程序里用看門狗。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、看門狗應用架構分析1.1 系統監控流程圖1.2 雙看門狗應用場景對比 二、…

nacos集群啟動問題

根據您的描述&#xff0c;Nacos集群只能啟動兩個節點&#xff0c;可能的原因和解決方法如下&#xff1a; 1. 集群配置問題 ? 原因&#xff1a;cluster.conf文件中可能只配置了兩個節點的地址&#xff0c;導致第三個節點無法加入集群。 ? 解決方法&#xff1a; ? 檢查每個…

【C語言】跳臺階

相信你是最棒噠&#xff01;&#xff01;&#xff01; 一、題目描述 二、題目代碼 1.斐波那契數列 2.DFS深度搜索 總結 一、題目描述 一只青蛙一次可以跳上1級臺階&#xff0c;也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法&#xff08;先后次序不同算不同的結果…

指紋瀏覽器技術架構解析:高并發批量注冊業務的工程化實踐——基于分布式指紋引擎與防關聯策略的深度實現

一、技術背景與行業痛點 在跨境電商、廣告投放、問卷調查等場景中&#xff0c;批量注冊與多賬號矩陣運營已成為剛需。然而&#xff0c;主流平臺&#xff08;如亞馬遜、Facebook、Google&#xff09;的風控系統通過瀏覽器指紋追蹤&#xff08;Canvas/WebGL/WebRTC等&#xff09…

linux基礎操作

一、系統目錄知識 /bin&#xff1a; bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot&#xff1a; 這里存放的是啟動 Linux 時使用的一些核心文件&#xff0c;包括一些連接文件以及鏡像文件。 /dev &#xff1a; dev 是 Device(設備) 的縮寫,…

源碼分析之Leaflet圖層控制控件Control.Layers實現原理

概述 本文將介紹Leaflet庫中最后一個組件&#xff0c;即圖層控制組件 Control.Layers。 源碼實現 export var Layers Control.extend({options: {collapsed: true,position: "topright",autoZIndex: true,hideSingleBase: false,sortLayers: false,sortFunction:…

Element 使用 textarea 內容實現高度自適應

在 ElInput 組件的 type"textarea" 模式下&#xff0c;你可以使用 autosize 屬性來實現內容高度自適應。當沒有內容時默認顯示 3 行&#xff0c;當有內容時根據內容動態調整高度。 代碼&#xff1a; <el-form-item v-if"item.type textarea" :rules&…

Java技術生態前沿洞察:虛擬線程引領并發革命,框架創新賦能云原生時代

Java技術生態正迎來新一輪變革浪潮。虛擬線程的落地成為高并發編程范式轉折點&#xff0c;其極低資源開銷特性在電商秒殺場景中展現出3倍吞吐量提升&#xff0c;徹底改寫傳統線程模型性能邊界。Spring Boot 3.2原生支持虛擬線程&#xff0c;結合Observation API與HTTP客戶端優化…

leetcode每日一題:替換子串得到平衡字符串

引言 今天的每日一題原題是1863. 找出所有子集的異或總和再求和&#xff0c;比較水&#xff0c;直接對于集合中的每一個元素&#xff0c;都有取或者不取2種情況&#xff0c;直接遞歸進去求和即可。更換成前幾天遇到的更有意思的一題來寫這個每日一題。 題目 有一個只含有 Q,…

node-modules-inspector 可視化node_modules

1、node_modules 每個vue的項目都有很多的依賴&#xff0c;有的是dev的&#xff0c;有的是生產的。 2、使用命令pnpx node-modules-inspector pnpx node-modules-inspector 3、node_modules可視化 4、在線體驗 Node Modules Inspector 5、github地址 https://github.com/a…

【零基礎入門unity游戲開發——動畫篇】unity舊動畫系統Animation組件的使用

考慮到每個人基礎可能不一樣&#xff0c;且并不是所有人都有同時做2D、3D開發的需求&#xff0c;所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要講解C#的基礎語法&#xff0c;包括變量、數據類型、運算符、…

Linux網絡:數據鏈路層以太網

目錄 認識數據鏈路層關于以太網1. 基本概念2. 以太網幀格式3. MAC vs IP 認識數據鏈路層 數據鏈路層 位于物理層和網絡層之間&#xff0c;其作用是將源自物理層來的數據可靠地傳輸到相鄰節點的目標主機的網絡層&#xff0c;主要通過物理介質(如以太網&#xff0c;Wi-Fi等)將數…

SpringMVC與SpringCloud的區別

SpringMVC與SpringCloud的核心區別 功能定位 ? SpringMVC&#xff1a; 基于Spring框架的Web層開發模塊&#xff0c;采用MVC&#xff08;Model-View-Controller&#xff09;模式&#xff0c;專注于處理HTTP請求、路由分發&#xff08;如DispatcherServlet&#xff09;和視圖…