当前位置: 首页 > 知识库问答 >
问题:

按开始时间对已完成的请求进行排序

龙学
2023-03-14

给定在未知时间到达的请求,ID 为 1. 开始请求(整数 id) 2.EndRequest(int id)

我需要返回已完成请求的id,以及按开始时间排序的总时间(endTime-startTime)。

请注意,如果以前的请求尚未完成,则当前请求即使完成也不会返回。

我尝试了一种天真的方式:在开始请求时,我添加到列表中,在结束请求时,检查从列表开始到第一个未完成的请求是否存在,然后返回它们。

有没有更高效的方法?在EndRequest上返回结果是最好的方式吗?

共有1个答案

广献
2023-03-14

在您最喜欢/使用的语言中使用以下proc:

public class StartEndRequest {
private static void swap(int [] starts, int [] ends, int i, int j) {
    int temp = starts[i];
    int temp1 = ends[i];

    starts[i] = starts[j];
    ends[i] = ends[j];

    starts[j] = temp;
    ends[j] = temp1;
}
// selection sort ..
private static void sortByProcessTime(int [] starts, int [] ends) {
    for(int i=0; i<starts.length-1; i++) {
        int min = i;
        for(int j=i+1; j<starts.length; j++) {
            // swap according to execution time..
            if((ends[j] - starts[j]) > (ends[i] - starts[i]))
                min = j;
        }

        swap(starts, ends, i, min);
    }
}
private static ArrayList<ArrayList<Integer>> getFinishedProcess(int [] prevProcess, int [] starts, int [] ends){
    ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

    for(int i=0; i<prevProcess.length; i++) {
        // add the first operation, it has no prev. operation..
        if(i == 0) {
            ArrayList<Integer> temp = new ArrayList<>();
            temp.add(starts[i]);
            temp.add(ends[i]);

            list.add(temp);
        }
        if(prevProcess[i] != -1) {
            ArrayList<Integer> temp = new ArrayList<>();
            temp.add(starts[i]);
            temp.add(ends[i]);

            list.add(temp);
        }
    }
    return list;
}
private static void blockUnfinishedProcess(int [] preProcesses, int [] starts, int [] ends) {
    for(int i=1; i<preProcesses.length; i++) {
        if(ends[i] == -1) {
            preProcesses[i] = -1;
        }
    }
}
public static void main(String[] args) {
    // use an auxiliary space to point prev. operations..
    int [] prevProcess = {-1, 0, 0, 0, 0, 0};
    int [] startReq = {2, 3, 1, 4, 6, 5};
    // i am using -1 to indicate unfinished jobs..
    int [] endReq = {7, 4, 3, -1, 8, -1};

    // sort according to execution time..
    sortByProcessTime(startReq, endReq);

    // block those operation whose prev was not finished ..
    blockUnfinishedProcess(prevProcess, startReq, endReq);

    //
    for(int i=0; i<startReq.length; i++) {
        System.out.println(startReq[i]+" -- "+endReq[i]);
    }

    // add only those operation, whose prev also executed successfully.. 
    System.out.println(getFinishedProcess(prevProcess, startReq, endReq));
}

}

 类似资料:
  • 问题内容: 我有一个包含从上午8:00到下午4:00的时间列表。 当我在输出中显示它时,它似乎没有排序,而当我使用它时,它的排序时间是从1:00 pm到8:00 am。 我如何从8:00 am到4:00 pm排序我的列表? 问题答案: 不要重新发明轮子,而是使用collection(如果允许使用java8,则使用Lambdas)How ??:将列表保留为字符串,但使用Anonymous 比较器 ,

  • 问题内容: 我将应用程序发布的想法存储在Firestore中。数据像这个 Ideas / {documentID} / IdeaObject 一样存储在Firestore中。问题是,当我检索数据时,它没有按发布时间排序。检索到的构想根据其文档ID的ID来确定,该ID由Firestore自动创建。我在模型类中使用了 ServerTimestamp ,并且在检索它时,我在Firestore引用中使用了

  • 问题内容: 找出特定请求花费了多长时间的好方法是什么? 我想获取此信息,然后将其显示在页面上的某处。 回答??:::: 我是javascript新手,如果您不想内联“ success”函数(因为它将是一个更大的函数),这是我能想到的最好的方法(这是执行此操作的好方法)吗?我觉得我已经把事情复杂化了…: 问题答案: @codemeit是正确的。他的解决方案如下所示,将jQuery用于ajax请求。这

  • 我有一个服务器,它根据各种客户端的人工时间戳接收它们的请求。使用以下函数生成每个客户端的时间戳: 此函数在本地存在于每个客户端中,并在向服务器发送消息时调用。服务器有一个请求队列,它基本上是一个ArrayBlockingQueue。它保存从每个客户端收到的请求。 客户端发送其ID和更新的时间戳(ts)。有没有什么方法可以根据客户端发送的时间戳在服务器端的队列中对请求进行排序? 任何帮助都将不胜感激

  • 考虑一个简单的C#NET Framework 4.0应用程序,该应用程序: 使用WebClient 使用NTLM进行身份验证(在IIS 6.0和IIS 7.5服务器上测试) 使用DownloadString()多次从URL检索字符串 这里有一个很好的示例:

  • 我有一个班的学生有以下领域: 字段“状态”可以有2个值:1。现在,2。缺席的 然后我有一个可观察的列表: 因此,我将学生存储在这个列表中。每个学生都有出席或缺席状态。 我需要按状态对这个观察列表进行排序。我希望目前状态的学生在该列表中名列第一。 有什么建议吗? 如果有任何帮助,我将不胜感激。