打印機任務排序---JavaScript版


以下為本人思路及代碼。本題輸入輸出均使用牛客網輸入輸出

題目:

有一個打印機,有一些任務在排着隊打印,每個任務都有優先級。
打印時,每次取出隊列第一個任務,如果它的優先級不是當前隊列中最高的,就會被放到隊尾,否則就打印出來。
輸出初始隊列的第m個任務的打印時間,每次打印花費單位1的時間。

樣例輸入:

1 0
4 2
2 3 4
0
1 9 1 1 1

樣例輸出:

1
2
5


筆者解題思路:

如果輸入一行2 3 5 3 4這樣一行數據,目標任務為位列第二的“3”,那么按照打印機的思路,它會試圖找到最大優先級的5打印出來,在這個過程中,原任務序列中排在“5”前面的“2 3”以不變的順序,放到了“5”后面的“3 4” 。如此循環,把大於目標“3”的數都以這個方法對數組進行重新重組。但是由於重組數據之后,會找不到原來的目標打印任務所在的位置,所以在一開始還需要對目標任務進行標記,考慮到重組數據的時候,插入字母不會影響別的數組的順序,筆者在目標任務“3“前面插入字母”p“,這樣直到所有的4打印完,p仍然緊跟目標任務。打印5之后任務列表為 3 4 2 p 3,打印4之后變成 2 p 3 3,  這樣之后只需要再去找到p的位置,就能知道接下來還需要幾次到目標任務了。實現代碼如下

var index = parseInt(readline().split(" ")[1]);//目標任務在隊列中的位置
var nums = readline().split(" ");//任務隊列
var temp = 0;//當前已打印次數
var m = nums[index];//目標任務優先級
var arr;
var line = "";

for(var i in nums){
  if(i == index){
    line += "p";
  }
  line += nums[i];
}
for(var i=9;i>m;i--){
  if(line.indexOf(i) != -1){
    arr = line.split(i);
    temp += arr.length-1;
    line = arr[arr.length-1];
    for(var j=0;j<arr.length-1;j++){
      line += arr[j];
    }
  }
}
var s = line.split("");

for(var i in s){
  if(s[i] == "p"){
    temp++;
    break;
  }
  if(s[i] == m){
    temp++;
  }
}

console.log(temp);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM