華為OD機試真題C卷-篇6

100分值題

  • 寬度最小的子矩陣
  • 部門人力分配
  • 電腦病毒感染
  • 會議室占用時間段

寬度最小的子矩陣

  • 給定一個n行 * m列的矩陣;
  • 給定一個k個整數的數組k_list;
  • 在n*m的矩陣中找一個寬度最小的子矩陣,該子矩陣包含k_list中所有的整數;
    輸入描述:
    第一行輸入n,m 兩個整數;
    后續n行每行輸入 m個數據;
    輸入k值;
    輸入個整數
    輸出描述:
    最小寬度值,若找不到,則輸出-1

示例1
輸入:
2 5
1 2 2 3 1
2 3 2 3 2
3
1 2 3
輸出:
2
說明,
矩陣第0、3列包含了1、2、3;
矩陣第3、4列包含了1、2、3

示例2
輸入:
2 5
1 2 2 3 1
1 3 2 3 4
3
1 1 4
輸出:
5
思路:

  • 滑動的子矩陣
  • 從第一列起始,找一個寬度最小的子矩陣;
  • 從第二列開始,找一個寬度最小的子矩陣;
  • 依次到最后一列…
  • 以上的寬度每次取最小值
 
class MinWidth:def solution(self, n, m, matrix, k_list):k_dict = self.to_dict(k_list)min_width = float("inf")# 類似雙指針for start_idx in range(m):for end_idx in range(start_idx, m):temp_list = []# 獲取當前子矩陣的所有元素for i in range(n):temp_list.extend(matrix[i][start_idx:end_idx+1])temp_dict = self.to_dict(temp_list)# 集合操作flag = Truefor key in k_dict:if key in temp_dict and k_dict[key] <= temp_dict[key]:continueelse:flag = Falsebreakif flag:min_width = min(min_width, end_idx - start_idx + 1)breakprint(min_width)def to_dict(self, alist):dict_ = {}for i in alist:dict_[i] = dict_.get(i, 0) + 1return dict_if __name__ == '__main__':min_width = MinWidth()while True:try:n, m = list(map(int, input().strip().split()))matrix = []for i in range(n):matrix.append(list(map(int, input().strip().split())))k = int(input().strip())k_list = list(map(int, input().strip().split()))min_width.solution(n, m, matrix, k_list)except KeyboardInterrupt:break

&nbsp

部門人力分配

  • requirements表示開發需求數組,每個值表示當前需求的月數,所有需求需要在m個月內完成;
  • 每個月最多有2個需求完成開發;人力安排后每個月人力是固定的;
  • 在滿足需求開發進度的情況下,每個月需要的最小人力是多少?
    輸入描述:
    第一行輸入m
    第二行輸入requirements 數組, 值>=1 長度為n;
    1<=n/2<=m<=n<=10000
    輸出描述:
    輸出部門需要的人力?

示例1
輸入:
3
3 5 3 4
輸出:
6
說明:
開發時間為5個月的需求在一個月內完成,則需要5個人;
3 3 合并到一個月完成,需要6個人力;
3 4合并到一個月完成,需要7個人力;
4 5合并到一個月完成,需要9個人力;

示例2
輸入:
3
3 3 4 5 6
輸出:
8

示例3
輸入:
3
3 3 4 5 6 2
輸出:

思路:

  • n個需求,n個月完成需要的人力較少,m個月完成人力增加;
  • n個需求在m個月內完成,當n==m時,取requirements的最大值;
  • n>m時,requirements升序排序,依次取出不需要合并的最大值放入temp_list,直到n==m的情況;
    • 剩余需要合并的數對,利用雙指針進行兩兩合并(最大值組合一個最小值),求的和放入temp_list;
    • 最終 temp_list 長度會等于m,此時取temp_list的最大值即可;

class LeastResource:def solution(self, requirements, m):n = len(requirements)requirements.sort()temp_list = []if n == m:result = max(requirements)print(result)else:while n / 2 < m:temp_list.append(requirements.pop())n -= 1m -= 1# 剩余需求 需要兩兩組合self.merge(temp_list, requirements)result = max(temp_list)print(result)def merge(self, temp_list, requirements):cur_n = len(requirements)pre = 0cur = cur_n - 1while pre < cur:cur_sum = requirements[pre] + requirements[cur]temp_list.append(cur_sum)pre += 1cur -= 1if __name__ == '__main__':least_resource = LeastResource()while True:try:m = int(input().strip())requirements = list(map(int, input().strip().split()))least_resource.solution(requirements, m)except KeyboardInterrupt:break

二分法
最小人力范圍在requirements的最大值—最大值+次最大值 之間;

m = int(input())
nums = [int(x) for x in input().split(" ")]
nums.sort()def cal(k, nums, length) :low = 0high = length - 1months = 0while (True) :if(low > high):breakelse :if (nums[low] + nums[high] > k) :high -= 1else :low += 1high -= 1months+=1return monthslow = nums[len(nums)-1]
high = nums[len(nums)-1] + nums[len(nums)-2]result = -1
while (True) :if(low > high):breakelse :k = int((low + high) / 2)if (cal(k, nums, len(nums)) <= m) :high = k - 1result = kelse :low = k + 1
print(result)

?

電腦病毒感染

  • 一個局域網內有n臺電腦,編號為 0 -> n-1,電腦之間病毒感染時間用t表示;
  • 現在網絡內已有一臺電腦被病毒感染;
  • 求其感染所有其他電腦最少的時間,若最后有電腦不會感染,則返回-1;
  • 數組times 表示一臺電腦把相鄰的電腦感染所用的時間;
  • path[i] = {i, j, t} 表示 電腦i 感染 電腦j 所用的時間t;
    輸入描述:
    第一行輸入n 在[1, 200]
    第二行輸入m, 表示m條網絡;
    后m行,每行輸入i,j,t, 1<=i,j<=n
    最后一行輸入攜帶病毒的電腦編號;
    輸出描述:
    感染全部電腦的最少時間,不能感染全部輸出-1

示例1
輸入:
4
3
2 1 1
2 3 1
3 4 1
2
輸出:
2

思路

  • 單源最短路徑
 
n = int(input())
count = int(input())
time = [float('inf') for i in range(n)]matrix=[[0 for i in range(3)] for j in range(count)]
for j in range(count):nums = [int(x) for x in input().split(" ")]matrix[j][0] = nums[0] matrix[j][1] =nums[1]matrix[j][2] = nums[2]start = int(input())
time[start-1] = 0for i in range(n):for j in range(count):   if (time[matrix[j][0]-1] + matrix[j][2] < time[matrix[j][1]-1]) :time[matrix[j][1]-1] = time[matrix[j][0]-1] + matrix[j][2]result = 0
i=0
while(True):if(i>=n):print(result)breakelse :if (time[i] == float('inf')) :print(-1)breakif(time[i]>result):result = time[i]i+=1

?

會議室占用時間段

在這里插入圖片描述
在這里插入圖片描述

 
meetings = [[1,4], [2,5],[7,9], [14,18]]
def merge(meetings) :sorted(meetings,key=lambda x: (x[1],x[0]))result = []result.append(meetings[0])cur = result[0]i=1while(True):if(i>=len(meetings)):breakelse :if (cur[1] >= meetings[i][0] and cur[1] <= meetings[i][1]) :cur[1] = meetings[i][1]elif(cur[1] > meetings[i][1]):passelse :result.append(meetings[i])cur = meetings[i]i+=1print(result)return result
merge(meetings)

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

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

相關文章

【大數據】Flink SQL 語法篇(九):Window TopN、Deduplication

《Flink SQL 語法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 語法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 語法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇&#xff08;三&…

COM - get VARIANT value - .vt = (VT_BSTR | VT_ARRAY)

文章目錄 COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY)概述筆記END COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY) 概述 取到一個VARIANT值, .vt 0x2008, 查了一下, 0x2008 (VT_BSTR | VT_ARRAY) 查了資料, 這個vt 0x2008是BSTR的數組. 看看咋取值? 網上…

3.2 log |416. 分割等和子集,1049.最后一塊石頭的重量II,494.目標和

416. 分割等和子集 class Solution { public:bool canPartition(vector<int>& nums) {vector<int> dp(10001,0);int sumaccumulate(nums.begin(),nums.end(),0);if(sum%2) return false;int targetsum/2;for(int i0;i<nums.size();i){for(int jtarget;j>…

項目管理:高效推動項目成功的關鍵

項目管理&#xff1a;高效推動項目成功的關鍵 在當今競爭激烈的商業環境中&#xff0c;項目管理已成為企業實現目標和取得成功的關鍵因素。有效的項目管理不僅能夠確保項目按時完成&#xff0c;還能在預算范圍內達到預期的質量標準。本文將探討項目管理的重要性、關鍵環節以及…

Maven安裝并配置本地倉庫

一、安裝Maven 1.下載鏈接 Maven官網下載鏈接 Binary是可執行版本&#xff0c;已經編譯好可以直接使用。 Source是源代碼版本&#xff0c;需要自己編譯成可執行軟件才可使用。 tar.gz和zip兩種壓縮格式,其實這兩個壓縮文件里面包含的內容是同樣的,只是壓縮格式不同 tar.gz格…

Stable Video文本生成視頻公測地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI發布了首個開放視頻模型——"Stable Video"&#xff0c;該創新工具能夠將文本和圖像輸入轉化為生動的場景&#xff0c;將概念轉換成動態影像&#xff0c;生成出電影級別的作品&#xff0c;旨在滿足廣泛的視頻應用需求&#xff0c;包括媒…

STM32 DMA入門指導

什么是DMA DMA&#xff0c;全稱直接存儲器訪問&#xff08;Direct Memory Access&#xff09;&#xff0c;是一種允許硬件子系統直接讀寫系統內存的技術&#xff0c;無需中央處理單元&#xff08;CPU&#xff09;的介入。下面是DMA的工作原理概述&#xff1a; 數據傳輸觸發&am…

解決Java并發問題的常見思路

寫在文章開頭 近期對一些比較老的項目進行代碼走查&#xff0c;碰到一些極端的并發編程惡習&#xff0c;所以筆者就基于此文演示這類問題以及面對并發編程時我們應該需要了解一些常見套路。 Hi&#xff0c;我是sharkChili&#xff0c;是個不斷在硬核技術上作死的java coder&am…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介紹 Stable Diffusion 作為當下最流行的開源 AI 圖像生成模型在游戲行業有著廣泛的應用實踐&#xff0c;無論是 ToC 面向玩家的游戲社區場景&#xff0c;還是 ToB 面向游戲工作室的美術制作場景&#xff0c;都可以發揮很大的價值&#xff0c;如何更好地使用 Stable Dif…

scanf和cin的利弊

scanf和cin的利弊&#xff1a; scanf: 利&#xff1a;耗時短&#xff0c;寫法方便輸入固定格式&#xff0c;比如scanf(“%*d%d”,&a)&#xff0c;可以直接忽略第一個輸入&#xff0c;不用創建新對象&#xff0c;再比如scanf(“%1d”,&x[i])&#xff0c;輸入3214&#x…

卡牌——二分

卡牌 題目分析 想一下前面題的特點&#xff0c;是不是都出現了“最大邊長”&#xff0c;“最小的數”這種字眼&#xff0c;那么這里出現了“最多能湊出多少套牌”&#xff0c;我們可以考慮用二分。接下來我們要看一下他是否符合二段性&#xff0c;二分的關鍵在于二段性。 第…

續Java的執行語句、方法--學習JavaEE的day07

day07 一、特殊的流程控制語句 break(day06) continue 1.理解&#xff1a; 作用于循環中&#xff0c;表示跳過循環體剩余的部分&#xff0c;進入到下一次循環 做實驗&#xff1a; while(true){ System.out.println(“111”); System.out.println(“222”); if(true){ conti…

編譯鏈接實戰(25)gcc ASAN、MSAN檢測內存越界、泄露、使用未初始化內存等內存相關錯誤

文章目錄 1 ASAN1.1 介紹1.2 原理編譯時插樁模塊運行時庫2 檢測示例2.1 內存越界2.2 內存泄露內存泄露檢測原理作用域外訪問2.3 使用已經釋放的內存2.4 將漏洞信息輸出文件3 MSAN1 ASAN 1.1 介紹 -fsanitize=address是一個編譯器選項,用于啟用AddressSanitizer(地址

基于SpringBoot的教師考勤管理系統(贈源碼)

作者主頁&#xff1a;易學蔚來-技術互助文末獲取源碼 簡介&#xff1a;Java領域優質創作者 Java項目、簡歷模板、學習資料、面試題庫 教師考勤管理系統是基于JavaVueSpringBootMySQL實現的&#xff0c;包含了管理員、學生、教師三類用戶。該系統實現了班級管理、課程安排、考勤…

基于springboot的足球俱樂部管理系統的設計與實現

** &#x1f345;點贊收藏關注 → 私信領取本源代碼、數據庫&#x1f345; 本人在Java畢業設計領域有多年的經驗&#xff0c;陸續會更新更多優質的Java實戰項目希望你能有所收獲&#xff0c;少走一些彎路。&#x1f345;關注我不迷路&#x1f345;** 一 、設計說明 1.1 課題…

2024.3.3每日一題

LeetCode 用隊列實現棧 題目鏈接&#xff1a;225. 用隊列實現棧 - 力扣&#xff08;LeetCode&#xff09; 題目描述 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&…

如何取消ChatGPT 4.0的自動續費和會員訂閱(chatgpt4.0自動續費嗎)

如何取消ChatGPT 4.0的自動續費和會員訂閱 ChatGPT 4.0自動續費是否存在 是的&#xff0c;ChatGPT 4.0 Plus會員服務存在自動續費功能。 ChatGPT 4.0 Plus會員服務自動續費 ChatGPT Plus會員服務的自動續費機制用戶在購買ChatGPT 4.0 Plus會員服務后&#xff0c;系統會自動…

npm ERR! code ERESOLVE

1、問題概述&#xff1f; 執行npm install命令的時候報錯如下&#xff1a; tangxiaochuntangxiaochundeMacBook-Pro stf % npm install npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resol…

LeetCode102.二叉樹的層序遍歷

題目 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;[[3],[9,20],[15,7]]輸入&#xff1a;root [1] 輸出&am…

SpringCloud-MQ消息隊列

一、消息隊列介紹 MQ (MessageQueue) &#xff0c;中文是消息隊列&#xff0c;字面來看就是存放消息的隊列。也就是事件驅動架構中的Broker。消息隊列是一種基于生產者-消費者模型的通信方式&#xff0c;通過在消息隊列中存放和傳遞消息&#xff0c;實現了不同組件、服務或系統…