java數組題(5)

(1):

?思路:

1.首先要對數組nums排序,這樣兩數之間的差距最小。

2.題目要求我們通過最多?k?次遞增操作,使數組中某個元素的頻數(出現次數)最大化。經過上面的排序,最大數組也就是在整個數組里的某一截。使用滑動窗口

3.初始化兩個指針?left?和?right,分別表示滑動窗口的左右邊界,假設我們獲得了一截數組是我們想要的,怎么證明呢?判斷條件是什么?

4.?要最大可能頻數,先定義一個maxF來表示最高頻元素的最大可能頻數。可以通過Math.max來獲得最大頻數。

5.做一個假設,在窗口里的數字都變成最高元素(也就是right指針所在)。那么n個元素*最高元素=MaxSum,這個最大總和減去實際n個元素的總和的值(MaxSum-Sum=x),要是大于k就說明在這個滑動窗口里,數據太多,k達不到最高頻元素的最大可能頻數。左指針++。同時更新?sum,直到?sum?不大于?k更新?maxF

6.返回?maxF

代碼:

import java.util.Arrays;public class Solution {public int maxFrequency(int[] nums, int k) {Arrays.sort(nums);int left = 0;long sum = 0;int maxFreq = 0;for (int right = 0; right < nums.length; right++) {sum += nums[right];while ((long) nums[right] * (right - left + 1) - sum > k) {sum -= nums[left];left++;}maxFreq = Math.max(maxFreq, right - left + 1);}return maxFreq;}
}

代碼解釋:

  1. 排序數組:首先對數組進行排序,以便后續使用滑動窗口。
  2. 初始化變量
    • left:滑動窗口的左邊界
    • sum:窗口內所有元素的和(使用long避免整數溢出)
    • maxF:記錄最大頻數
  3. 滑動窗口遍歷
    • 右指針right從 0 開始遍歷數組
    • 每次將當前元素加入窗口,并更新窗口和sum
    • 檢查當前窗口是否滿足條件:nums[right] * (right - left + 1) - sum <= k
      • 如果不滿足,則縮小窗口左邊界left,并更新窗口和sum
    • 更新最大頻數maxF
  4. 返回結果:遍歷結束后返回最大頻數。

復雜度分析:

  • 時間復雜度:O (n log n)(排序) + O (n)(滑動窗口遍歷)= O (n log n)
  • 空間復雜度:O (1)(僅使用常數額外空間

(2):?

?思路:

我們需要通過重新排列數組元素并減小它們的值,使得數組的第一個元素為 1,且相鄰元素的差的絕對值不超過 1,同時最大化數組中的最大值。關鍵在于構造一個從 1 開始的遞增序列,每個元素盡可能比前一個大 1,因為這樣可以得到最大的可能值

  1. 排序數組:首先將數組排序,以便后續處理。
  2. 貪心構造遞增序列:從 1 開始,依次嘗試構造下一個數(當前數 + 1),只要數組中存在至少一個元素大于等于當前需要構造的數,就可以使用該元素來構造,并繼續構造下一個更大的數。

代碼:

import java.util.Arrays;class Solution {public int maximumElementAfterDecrementingAndRearranging(int[] arr) {Arrays.sort(arr);int required = 1; // 需要構造的下一個數,初始為1(第一個元素必須是1)for (int x : arr) {if (x >= required) {required++; // 可以構造當前required,接下來構造required+1}}return required - 1; // 最大構造到required-1,因為最后一次遞增了required}
}

?代碼解釋

  1. 排序數組:使用Arrays.sort(arr)對數組進行升序排序,以便從小到大處理每個元素。
  2. 初始化變量required表示當前需要構造的下一個數,初始為 1,因為數組的第一個元素必須是 1。
  3. 遍歷數組:對于每個元素x,如果x大于等于當前需要構造的數required,則說明可以使用該元素來構造required,并將required加 1,嘗試構造下一個更大的數(required + 1)。
  4. 返回結果:最終required - 1即為能夠構造的最大數,因為每次成功構造一個數后required會遞增,最后一次遞增后required比最大數大 1。

這種方法通過貪心策略,每次盡可能構造更大的數,確保了構造的序列是連續遞增的,從而最大化了數組中的最大值。時間復雜度主要由排序決定,為 O (n log n),空間復雜度為 O (1)(不考慮排序的棧空間)。

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

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

相關文章

Python(1) 做一個隨機數的游戲

有關變量的&#xff0c;其實就是 可以直接打印對應變量。 并且最后倒數第二行就是可以讓兩個數進行交換。 Py快捷鍵“ALTP 就是顯示上一句的代碼。 —————————————————————————————— 字符串 用 雙引號或者單引號 。 然后 保證成雙出現即可 要是…

【認知思維】驗證性偏差:認知陷阱的識別與克服

什么是驗證性偏差 驗證性偏差&#xff08;Confirmation Bias&#xff09;是人類認知中最普遍、最根深蒂固的心理現象之一&#xff0c;指的是人們傾向于尋找、解釋、偏愛和回憶那些能夠確認自己已有信念或假設的信息&#xff0c;同時忽視或貶低與之相矛盾的證據。這種認知偏差影…

Wpf學習片段

IRegionManager 和IContainerExtension IRegionManager 是 Prism 框架中用于管理 UI 區域&#xff08;Regions&#xff09;的核心接口&#xff0c;它實現了模塊化應用中視圖&#xff08;Views&#xff09;的動態加載、導航和生命周期管理。 IContainerExtension 是依賴注入&…

消息~組件(群聊類型)ConcurrentHashMap發送

為什么選擇ConcurrentHashMap&#xff1f; 在開發聊天應用時&#xff0c;我們需要存儲和管理大量的聊天消息數據&#xff0c;這些數據會被多個線程頻繁訪問和修改。比如&#xff0c;當多個用戶同時發送消息時&#xff0c;服務端需要同時處理這些消息的存儲和查詢。如果用普通的…

Stapi知識框架

一、Stapi 基礎認知 1. 框架定位 自動化API開發框架&#xff1a;專注于快速生成RESTful API 約定優于配置&#xff1a;通過標準化約定減少樣板代碼 企業級應用支持&#xff1a;適合構建中大型API服務 代碼生成導向&#xff1a;顯著提升開發效率 2. 核心特性 自動CRUD端點…

基于深度學習的水果識別系統設計

一、選擇YOLOv5s模型 YOLOv5&#xff1a;YOLOv5 是一個輕量級的目標檢測模型&#xff0c;它在 YOLOv4 的基礎上進行了進一步優化&#xff0c;使其在保持較高檢測精度的同時&#xff0c;具有更快的推理速度。YOLOv5 的網絡結構更加靈活&#xff0c;可以根據不同的需求選擇不同大…

Spring Security與SaToken的對比

Spring Security與SaToken的詳細對照與優缺點分析 1. 核心功能與設計理念 對比維度Spring SecuritySaToken核心定位企業級安全框架&#xff0c;深度集成Spring生態&#xff0c;提供全面的安全解決方案&#xff08;認證、授權、攻擊防護等&#xff09;輕量級權限認證框架&#…

【docker】--鏡像管理

文章目錄 拉取鏡像啟動鏡像為容器連接容器法一法二 保存鏡像加載鏡像鏡像打標簽移除鏡像 拉取鏡像 docker pull mysql:8.0.42啟動鏡像為容器 docker run -dp 8080:8080 --name container_mysql8.0.42 -e MYSQL_ROOT_PASSWORD123123123 mysql:8.0.42 連接容器 法一 docker e…

力扣HOT100之二叉樹:543. 二叉樹的直徑

這道題本來想到可以用遞歸做&#xff0c;但是還是沒想明白&#xff0c;最后還是去看靈神題解了&#xff0c;感覺這道題最大的收獲就是鞏固了我對lambda表達式的掌握。 按照靈神的思路&#xff0c;直徑可以理解為從一個葉子出發向上&#xff0c;在某個節點處拐彎&#xff0c;然后…

web 自動化之 yaml 數據/日志/截圖

文章目錄 一、yaml 數據獲取二、日志獲取三、截圖 一、yaml 數據獲取 需要安裝 PyYAML 庫 import yaml import os from TestPOM.common import dir_config as Dirdef read_yaml(key,file_name"test_datas.yaml"):file_path os.path.join(Dir.testcases_dir, file_…

rtty操作記錄說明

rtty操作記錄說明 前言 整理資料發現了幾年前做的操作記錄&#xff0c;分享出來&#xff0c;希望對大家有用。 rtty-master&#xff1a;rtty客戶端程序&#xff0c;其中buffer\log\ssl為源碼的子目錄&#xff0c;從git上下載https://github.com/zhaojh329&#xff0c; rtty…

mybatis中${}和#{}的區別

先測試&#xff0c;再說結論 userService.selectStudentByClssIds(10000, "wzh or 11");List<StudentEntity> selectStudentByClssIds(Param("stuId") int stuId, Param("field") String field);<select id"selectStudentByClssI…

【運維】MacOS藍牙故障排查與修復指南

在日常使用macOS系統過程中&#xff0c;藍牙連接問題時有發生。無論是無法連接設備、連接不穩定還是藍牙功能完全失效&#xff0c;這些問題都會嚴重影響我們的工作效率。本文將分享一些實用的排查方法和修復技巧&#xff0c;幫助你解決macOS系統上的藍牙故障。 問題癥狀 常見…

數據結構(一) 緒論

一. 時間復雜度: (1)定義: 時間復雜度是衡量算法執行時間隨輸入規模(通常用n表示)增長的變化趨勢的指標,時間復雜度用O符號表示 用于描述算法在最壞情況下或平均情況下的時間需求 時間復雜度關注的是操作次數的增長率&#xff0c;而非具體執行時間 常見的時間復雜度由小到大依次…

網絡協議與系統架構分析實戰:工具與方法全解

網絡協議與系統架構分析實戰&#xff1a;工具與方法全解 在互聯網系統的開發、運維與安全分析中&#xff0c;協議解析與抓包分析是不可或缺的核心技能。本文將系統梳理主流協議解析工具、協議自動識別方案&#xff0c;并結合實際抓包案例&#xff0c;講解如何還原和推測底層系…

發那科機器人4(編程實例)

發那科機器人4(編程實例) 一、編程實例1、直線運動實例2、圓弧運動實例3、曲線運動實例4、物料搬運實例5、異步輸送帶檢測一、編程實例 1、直線運動實例 本節內容:直線運動實例 本次實例,采用的是基礎模塊,以基礎模塊當中的四邊形為例,演示一下機器人的直線運動。 編程…

agent初識

AI Agent 時代已來&#xff1a;不止于聊天的智能體&#xff0c;將如何重塑我們的世界&#xff1f; AI Agent 時代已來&#xff1a;不止于聊天的智能體&#xff0c;將如何重塑我們的世界&#xff1f; 你是否曾驚嘆于 ChatGPT 的對答如流&#xff1f;或者 Midjourney 的妙筆生花…

.Net HttpClient 使用Json數據

HttpClient 使用Json數據 現代Web項目中&#xff0c;Json是最常用的數據格式。不論是前后端的交互中&#xff0c;還是純前端項目中&#xff0c;都是如此。因此&#xff0c;.Net HttpClient 能不能更加方便、快捷的處理Json格式數據&#xff0c;也就至關重要了&#xff01; 文末…

UDP--DDR--SFP,FPGA實現之指令監測模塊實現

指令監測模塊實現介紹 如下圖所示&#xff0c;為指令監測模塊的運行框圖 將指令設置為8bytes數據&#xff0c;故需要一個64位寄存器進行緩存&#xff0c;在進行數據緩存時&#xff0c;數據不可以輸出至下一級模塊&#xff0c;故對數據和有效指示信號也應該進行相應延遲&#…

JavaScript雙問號操作符(??)詳解,解決使用 || 時因類型轉換帶來的問題

目錄 JavaScript雙問號操作符&#xff08;??&#xff09;詳解&#xff0c;解決使用||時因類型轉換帶來的問題 一、雙問號操作符??的基礎用法 1、傳統方式的痛點 2、雙問號操作符??的精確判斷 3、雙問號操作符??與邏輯或操作符||的對比 二、復雜場景下的空值處理 …