- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
Cung cấp cho bạn một tác vụ mảng hai chiều, dùng để biểu diễn n tác vụ được đánh số từ 0 đến n - 1. TRONG task[i] = [enqueueTimei,processTimei] có nghĩa là task thứ i sẽ vào hàng đợi task tại enqueueTimei và yêu cầuprocessTimei để hoàn thành việc thực thi.
Có một CPU đơn luồng,Chỉ có thể thực hiện một nhiệm vụ cùng một lúc, CPU sẽ hoạt động như sau:
Nếu CPU không hoạt động và không có tác vụ nào trong hàng tác vụ cần được thực thi thì CPU vẫn ở chế độ rảnh.
Nếu CPU không hoạt động nhưng có các tác vụ trong hàng đợi tác vụ cần được thực thi thì CPU sẽChọn tác vụ có thời gian thực hiện ngắn nhất để bắt đầu thực hiện. Nếu nhiều tác vụ có cùng thời gian thực hiện tối thiểu thì tác vụ có chỉ mục nhỏ nhất sẽ được chọn để bắt đầu thực thi.
Khi một tác vụ bắt đầu thực thi, CPU sẽ không dừng cho đến khi toàn bộ tác vụ được thực thi.
CPU có thể ngay lập tức bắt đầu một nhiệm vụ mới sau khi hoàn thành một nhiệm vụ.
Trả về thứ tự CPU xử lý các tác vụ.
Ví dụ 1:
Đầu vào: task = [[1,2],[2,4],[3,2],[4,1]] Đầu ra: [0,2,3,1] Giải thích: Sự kiện diễn ra theo quy trình sau : - thời gian = 1, tác vụ 0 vào hàng tác vụ, mục tác vụ thực thi = {0} - cũng tại thời điểm = 1, CPU ở trạng thái rảnh bắt đầu thực thi tác vụ 0, mục tác vụ thực thi = {} - time = 2, tác vụ 1 Nhập hàng tác vụ, mục tác vụ thực thi = {1} - time = 3, tác vụ 2 vào hàng tác vụ, mục tác vụ thực thi = {1, 2} - cũng tại thời điểm = 3, CPU hoàn thành tác vụ 0 và bắt đầu thực thi thời gian trong hàng đợi Nhiệm vụ ngắn nhất 2, mục nhiệm vụ thực thi = {1} - time = 4, nhiệm vụ 3 vào hàng đợi nhiệm vụ, mục nhiệm vụ thực thi = {1, 3} - time = 5, CPU hoàn thành nhiệm vụ 2 Và bắt đầu thực thi tác vụ 3 ngắn nhất trong hàng đợi, tác vụ thực thi được item = {1} - time = 6, CPU hoàn thành tác vụ 3 và bắt đầu thực thi tác vụ 1, tác vụ thực thi được item = {} - time = 10, CPU hoàn thành tác vụ 1 và nhập trạng thái nhàn rỗi
Ví dụ 2:
Đầu vào: task = [[7,10],[7,12],[7,5],[7,4],[7,2]] Đầu ra: [4,3,2,0,1] Giải thích: Sự kiện diễn ra theo quy trình sau: - thời gian = 7, tất cả các tác vụ vào hàng đợi tác vụ cùng lúc, các mục tác vụ thực thi = {0,1,2,3,4} - Cũng tại thời điểm = 7, CPU nhàn rỗi bắt đầu thực hiện nhiệm vụ 4 , mục tác vụ thực thi = {0,1,2,3} - time = 9, CPU hoàn thành nhiệm vụ 4 và bắt đầu thực thi nhiệm vụ 3, mục tác vụ thực thi = {0,1,2} - time = 13, CPU hoàn thành nhiệm vụ 3 và bắt đầu thực thi tác vụ 2, mục tác vụ thực thi = {0,1} - time = 18, CPU hoàn thành tác vụ 2 và bắt đầu thực thi tác vụ 0, mục tác vụ thực thi = {1} - time = 28 , CPU hoàn thành nhiệm vụ 0 và bắt đầu thực thi nhiệm vụ 1, nhiệm vụ thực thi item = {} - time = 40, CPU hoàn thành nhiệm vụ 1 và chuyển sang trạng thái rảnh
gợi ý:
nhiệm vụ.length == n
1 <= n <= 105
1 <= enqueueTimei, thời gian xử lý <= 109
Nguồn: LeetCode
Liên kết: https://leetcode.cn/problems/single-threaded-cpu
(1) Vấn đề về khoảng thời gian
//Ý tưởng 1——Vấn đề khoảng thời gian public int[] getOrder(int[][] task) { //Có tổng cộng n nhiệm vụ int n = task.length; ArrayList triples = new ArrayList<> ( ); for (int i = 0; i < n; i++) { triples.add(new int[]{tasks[i][0], task[i][1], i} } // Sắp xếp các tác vụ theo thứ tự tăng dần theo thời gian bắt đầu triples.sort((a, b) -> { //Nếu giá trị trả về là số dương, đổi chỗ a và b return a[0] - b[0]; } ); // Sắp xếp tăng dần theo thời gian thực hiện của task. Nếu thời gian thực hiện giống nhau thì sắp xếp tăng dần theo chỉ số PriorityQueue pqueue = new PriorityQueue<>((a). , b) -> { if (a[ 1] != b[1]) { //So sánh thời gian thực hiện return a[1] - b[1] } else { //So sánh các chỉ số dưới return a[2] - b[2] } }); new ArrayList<>(); //Ghi lại tiến trình hoàn thành nhiệm vụ int time = 0; int i = 0; while (res.size() < n) { if (!pqueue.isEmpty()) { //Hoàn thành một nhiệm vụ trong hàng đợi int[] triple = pqueue.poll(); )[0] > dòng thời gian) { //Hàng đợi có thể trống vì chưa đến thời gian bắt đầu, do đó dòng thời gian có thể được nâng thẳng lên thời gian bắt đầu của dòng thời gian nhiệm vụ mới nhất = triples.get(i)[0 ]; // Khi dòng thời gian trôi qua, các tác vụ có thể bắt đầu sẽ được tạo trong khi (i < n && triples.get(i)[0] <= dòng thời gian) { pqueue.offer(triples.get(i)); } //Chuyển đổi danh sách thành int[] return res.stream().mapToInt(Integer::valueOf).toArray() }
Mã này dường như phá vỡ các trình biên dịch được sử dụng rộng rãi với tính năng tối ưu hóa được kích hoạt, mặc dù nó chạy tốt trong Visual Studio. struct foo { foo(int a) { s[0] = '0'+a%10;s[1]
Tôi muốn một biểu đồ có một mũi tên một dòng như thế này: 1 2 3 4 5 hoặc như thế này (trong đó / được coi là một mũi tên :)): \/ ------------- -- --
Tôi đang viết các quy tắc tùy chỉnh cho Java. Có hai phiên bản Tree.KIND (STRING_LITERAL và ASSIGNMENT) cần được ghi lại. Có một dòng cụ thể trong đó cả chuỗi ký tự và logic của phép gán đều gây ra vấn đề. Nhưng Sona
Rosettacode.org có giải pháp FizzBuzz một dòng tuyệt vời này trong Ruby. 1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n
Nhiều lần tôi sử dụng lệnh này để mở máy chủ HTTP tạm thời trong thư mục hiện tại: python3 -m http.server Bây giờ tôi cần nhận tệp, có lệnh một dòng để mở máy chủ ftp không? Tôi chỉ đang tìm kiếm một dòng lệnh
Các chủ đề liên quan std::unique_ptr, deleters và API Win32 Để sử dụng tay cầm Win32 làm RAII, tôi có thể sử dụng dòng sau std::unique_ptr::type,
Tôi nghĩ phải có giải pháp ổi một dòng để chuyển đổi một danh sách bất biến này sang một danh sách bất biến khác, nhưng tôi không thể tìm thấy nó. Giả sử chúng ta có đối tượng sau: ImmutableList input = ImmutableList.of("
Tôi có biểu đồ phân tán Highcharts (http://www.highcharts.com) sau đây. Lưu ý rằng trục bắt đầu ở -10 và dừng ở 10, với 0 ở giữa. Tôi muốn mỗi dòng 0 có chiều rộng hoặc màu khác với các dòng khác
Tôi có một dự án cần hợp nhất một tệp video với một tệp âm thanh khác. Đầu ra dự kiến là một tệp video chứa âm thanh từ video thực và tệp âm thanh được hợp nhất. Độ dài của tệp video đầu ra sẽ bằng với kích thước của tệp video thực tế. Có lệnh FFMPEG một dòng không?
Tôi có 2 danh sách trong một lớp python3: self.keys = ["a","b","c","d"] self.values = [1,2,3,4] len(self.keys ) ==len(se
Tôi có một danh sách các mảng có độ dài khác nhau và tôi muốn kết hợp chúng thành một ma trận kích thước tối đa với phần đệm bằng 0 ở cuối. Ví dụ (mã giả): Combine( [1,2,3], [4,5]) [[1,2,3],[4,5,0]] Đây là giải pháp hiện tại của tôi
Ví dụ: cho i=5 và n=8, tôi muốn tạo [0;0;0;0;1;0;0;0]. Cụ thể, tôi muốn tạo vectơ v sao cho: v = zeros(n,1); v(i) = 1; Có cách nào (hợp lý) để thực hiện việc này không?
Tôi là một lập trình viên xuất sắc, rất giỏi!