【今日頭條2017內推】排程問題
解題思路
首先對所有的任務按照 提出時間,優先順序,所需時間進行排序,即提出時間相等時按照優先順序排序,優先順序也相等時按照所需時間進行排序。
可以維護一個長度為M的堆,M為程式設計師員的數量,這個堆中儲存的值是程式設計師完成某個任務的完成時間點,依次取排序後的任務,然後在堆中取一個程式設計師,取堆頂的那個,這個任務的完成時間即為提出任務時間和堆中取出的時間的較大值加上任務所需時間。然後再將這個時間更新進堆中。
需要注意的是輸出的時候是按照輸入的任務順序進行輸出的,因而需要儲存任務的編號,然後按照編號由小到大的順序輸出結果。
這個題並沒有在線上測試,線下寫的,不知道有沒得問題。。。。
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;
class Task implements Comparable<Task> {
int startTime;
int needTime;
int level;
int sequence;
@Override
public int compareTo(Task o) {
// TODO Auto-generated method stub
if (startTime > o.startTime) {
return 1;
} else if (startTime < o.startTime) {
return -1;
} else {
if (level > o.level) {
return 1;
} else if (level < o.level)
return -1;
else {
if (needTime > o.needTime) {
return 1;
} else if (needTime < o.needTime)
return -1;
else {
return 0;
}
}
}
}
}
class FinishTime implements Comparable<FinishTime> {
int sequence;
int time;
@Override
public int compareTo(FinishTime o) {
// TODO Auto-generated method stub
return this.sequence > o.sequence ? 1 : (this.sequence < o.sequence ? -1 : 0);
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int P = sc.nextInt();
Task[] task = new Task[P];
for (int i = 0; i < P; i++) {
Task t = new Task();
sc.nextInt();
t.startTime = sc.nextInt();
t.level = sc.nextInt();
t.needTime = sc.nextInt();
t.sequence = i;
task[i] = t;
}
Arrays.sort(task);
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(M);
for (int i = 0; i < M; i++)
priorityQueue.add(0);
int index = 0;
FinishTime[] result = new FinishTime[P];
while (index < P) {
int time = priorityQueue.poll();
int finishTime = Math.max(task[index].startTime, time) + task[index].needTime;
priorityQueue.add(finishTime);
FinishTime t = new FinishTime();
t.sequence = task[index].sequence;
t.time = finishTime;
result[index]=t;
index++;
}
Arrays.sort(result);
for(int i=0;i<P;i++)
System.out.println(result[i].time);
}
}
相關推薦
【今日頭條2017內推】排程問題
解題思路 首先對所有的任務按照 提出時間,優先順序,所需時間進行排序,即提出時間相等時按照優先順序排序,優先順序也相等時按照所需時間進行排序。 可以維護一個長度為M的堆,M為程式設計師員的數量,這個堆中儲存的值是程式設計師完成某個任務的完成時間點,依次取
今日頭條2017內推
1. 座標系找點 描述: P為二維座標系中整數點集。定義P中某點x,如果x滿足P中的任一點都不在x的右上方,稱為“最大點”。找到所有的最大點。 輸入: 5 1 2 5 3 4 6 7
【演算法】今日頭條2017程式設計題
解法一: 思路: 第一步先 排序。這個大家都能想到。 第二步,三個為一組。首先看前三個 a1,a2,a3. FIRST 如果a2-a1<=10&&a3-a2<=10 則符合要求,就從第4個開始,a4,a5,a6為一
通過分析Ajax請求抓取【今日頭條】“街拍”美圖
有一些網頁直接請求得到的HTML程式碼並沒有在網頁中看到的內容,因為一些資訊是通過Ajax載入,並通過js渲染生成的,這時就需要通過分析網頁的請求來獲取想要爬取的內容。本文通過抓取今日頭條街拍美圖講解一下具體操作步驟。 網路庫:Requests 解析庫:BeautifulSoup+正則表
通過分析Ajax請求抓取【今日頭條】街拍美圖
有一些網頁直接請求得到的HTML程式碼並沒有在網頁中看到的內容,因為一些資訊是通過Ajax載入,並通過js渲染生成的,這時就需要通過分析網頁的請求來獲取想要爬取的內容。本文通過抓取今日頭條街拍美圖講解一下具體操作步驟。 網路庫:Requests 解析庫:Beau
【內推】Docker/K8S相關,阿里巴巴、Rancher、TalkingData、華雲資料等_Kubernetes中文社群
響應群內(Kubernetes技術交流微信群)小夥伴需求,徵集了一些朋友公司招聘崗位,基本是Docker/K8S相關的架構師、開發、運維崗位的推薦; (對Kubernetes感興趣小夥伴也可加入我們技術交流微信群,入群方式可在公眾號後臺回覆 “加群” 獲取) K8S中文社群公眾號 阿里巴巴
【騰訊內推】 內推流程簡介
針對內推流程,分PC和移動端做一下簡單介紹。公眾號:內推派。一般(PC端)推薦流程1、Allen內推Bob Allen填寫Bob相關個人資訊(電話+郵箱等)再申請推薦崗位(最多同時申請3個崗位)2、Bob會收到簡訊+郵件,通知完善簡歷 Bob開啟郵件中的連結“簡歷
【今日頭條】今日頭條三面面經
一面: (1) 演算法題,程式設計實現nsum (2)實現元素的居中並且寬高比為3:4 (3)程式碼實現繼承 (4)給了一段程式碼給出輸出結果,這個是和非同步相關 (5)http的狀態碼有哪些
【今日頭條】【實習】放出一大波職位
後臺開發實習生"後臺開發實習生 職位職責: 1.負責相關產品的後臺開發工作 2.主要實現語言python和golang 職位要求: 1.良好的設計和編碼品味,熱愛寫程式碼 2.較好的產品意識,願意將產品效果做為工作最重要的驅動因素 3.掌握WEB後端開發技術:
【今日頭條】演算法工程師 ~ 等你來投遞!
今日頭條社招今日頭條演算法工程師(這是社招哦) 職位描述 : 基於機器學習, 優化頭條新產品的排序, 提升使用者體驗 在這裡, 你有機會見證一個產品從0到1的過程, 在演算法,工程,產品上得到全方面的鍛鍊 基本要求 : 1. 熟悉常見演算法, 如LR, GBDT, DNN,
【今日頭條】【招聘】後臺研發工程師--java,前端開發工程師
測試開發(高階)工程師 崗位職責: 1、主要負責公司移動端產品質量保障工作; 2、日常專案線下測試與線上質量分析; 3、對專案中的問題進行監控、追查及定位; 4、學習和研究新技術以提高測試效率和質量; 5、對產品提出改進建議以建立極致的使用者感受,對專案提出改進建議以提高
【阿里巴巴-高德-汽車事業部】【內推】Java技術專家、前端技術專家、C++技術專家(長期招聘)
簡歷接收郵箱:[email protected] 郵件請備註來自CSDN 一、Java技術專家 職位描述 研究汽車智慧化和線上服務前沿技術,從事線上資料服務和車聯網服務的設計和研發 負責汽車資料服務和智慧硬體後臺服務的分散式架構設計和迭代,解決海量資料的儲存管理、安全分發等技術和業務挑戰
UVa 825【簡單dp,遞推】
space 遞推 log 題目 logs .org str eof scan UVa 825 題意:給定一個網格圖(街道圖),其中有一些交叉路口點不能走。問從西北角走到東南角最短走法有多少種。(好像沒看到給數據範圍。、。) 簡單的遞推吧,當然也就是最簡單的動歸了。顯然最短路
今日頭條2017後端工程師實習生筆試題 - 題解
進制 true 字符串 從右到左 試題 imp 最終 create head 今日頭條2017後端工程師實習生筆試題 最大映射 題意 給n(不超過50)個字符串,每個字符串(長度不超過12)由A-J的大寫字符組成。要求將每個字符映射為0-9,使得每個字符串可以看作一個整數(
頭條校招(今日頭條2017秋招真題)1——python解法
題目描述 頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊。每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來。在選題之前,我們對題目進行了盲審,並定出了每道題的難度係數。一場考試包含3道開放性題目,假設他們的難度從小到大分別為a, b, c,我
C++:環境配置 【visual Studio 2017 + Opencv 3】
當新建C++專案,一用到opencv庫函式的時候,就得配置,次次配,不如就寫個教程,怕下次又忘了…… 一 opencv安裝,環境變數設定 從官網下載opencv,解壓即可。我這裡用的是opencv3,(安裝路徑 eg:“ D:\ope
焦作預選賽L題【杜教線性遞推】 模板
真香,真好用,只許給出前幾項你就會體驗前所未有的快樂。 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #inclu
今日頭條筆試題,任務排程問題
產品經理(PM)有很多好的idea,而這些idea需要程式設計師實現。現在有N個PM,在某個時間會想出一個 idea,每個 idea 有提出時間、所需時間和優先等級。對於一個PM來說,最想實現的idea首先考慮優先等級高的,相同的情況下優先所需時間最小的,還相同的情況下選擇
網易2017內推筆試題
有 n 個學生站成一排,每個學生有一個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎? 輸入描述: 每個輸入包含 1 個測試用例。每個測試資料的第一行包含一個整
學習資料(乾貨彙集)不斷更新【更新於2017-9-17】
歡迎Follow我的GitHub, 關注我的CSDN. 其餘參考Android目錄. 推薦文章: 更新於2017年-9-17 1、535303 資料庫索引設計與優化 2、Android驅動開發與移植實戰詳解 3、Appium手機自動化解決方