JAVA找到处理最多请求的服务器——力扣每日一题(2022.03.30)

Posted 爱做梦的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA找到处理最多请求的服务器——力扣每日一题(2022.03.30)相关的知识,希望对你有一定的参考价值。

目录

我回来了,懈怠了好久🥹🥹🥹,冲冲冲!
一直走,天总会亮。

题目:1606. 找到处理最多请求的服务器

1606.找到处理最多请求的服务器
本题链接(点击直接跳转)https://leetcode-cn.com/problems/find-servers-that-handled-most-number-of-requests/

方法一:暴力(两层循环)

package daily;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Description 1606. 找到处理最多请求的服务器 暴力法
 * @Author 爱做梦的鱼
 * @Blog https://zihao.blog.csdn.net/
 * @Date 2022/3/31 20:27
 */
public class BusiestServers1 

  public static void main(String[] args) 
    int k = 3;
    int[] arrival = new int[]1, 2, 3, 4, 5;
    int[] load = new int[]5, 2, 3, 3, 3;
    List<Integer> test = new BusiestServers1().busiestServers(k, arrival, load);
    System.out.println(test);

//    int k = 3;
//    int[] arrival = new int[]1, 2, 3, 4, 8, 9, 10;
//    int[] load = new int[]5, 2, 10, 3, 1, 2, 2;
//    List<Integer> test = new BusiestServers().busiestServers(k, arrival, load);
//    System.out.println(test);
  

  public List<Integer> busiestServers(int k, int[] arrival, int[] load) 
    int[] serverTimes = new int[k];//空间复杂度:O(k)
    int[] serverNums = new int[k];
    for (int i = 0; i < arrival.length; i++) //时间复杂度,O(nk)
      for (int j = 0; j < k; j++) 
        int server = (i + j) % k;
        if (serverTimes[server] <= arrival[i]) 
          serverTimes[server] = arrival[i] + load[i];
          serverNums[server]++;
          break;
        
      
    

    int[] newServerNums = new int[k];
    System.arraycopy(serverNums, 0, newServerNums, 0, k);
    Arrays.sort(newServerNums);//快排,时间复杂度 O(klogk)
    List<Integer> results = new ArrayList<>();
    for (int i = 0; i < k; i++) 
      if (serverNums[i] == newServerNums[k - 1]) 
        results.add(i);
      
    
    //System.out.println(Arrays.toString(serverNums));
    return results;
  


复杂度分析:
时间复杂度:时间复杂度,O(nk+klogk),其中 k为服务器的数目,n为请求的数目。
空间复杂度:O(k)。

方法二:暴力(递归)

package daily;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Description 1606. 找到处理最多请求的服务器 暴力法,使用了递归
 * @Author 爱做梦的鱼
 * @Blog https://zihao.blog.csdn.net/
 * @Date 2022/3/30 21:31
 */
public class BusiestServers 

  public static void main(String[] args) 
    int k = 3;
    int[] arrival = new int[]1, 2, 3, 4, 5;
    int[] load = new int[]5, 2, 3, 3, 3;
    List<Integer> test = new BusiestServers().busiestServers(k, arrival, load);
    System.out.println(test);

//    int k = 3;
//    int[] arrival = new int[]1, 2, 3, 4, 8, 9, 10;
//    int[] load = new int[]5, 2, 10, 3, 1, 2, 2;
//    List<Integer> test = new BusiestServers().busiestServers(k, arrival, load);
//    System.out.println(test);
  

  public List<Integer> busiestServers(int k, int[] arrival, int[] load) 
    int[] serverTimes = new int[k];//空间复杂度:O(k)
    int[] serverNums = new int[k];
    for (int i = 0; i < arrival.length; i++) //时间复杂度,O(nk)
      recurse(i, i, arrival, load, serverTimes, serverNums);
    

    int[] newServerNums = new int[k];
    System.arraycopy(serverNums, 0, newServerNums, 0, k);
    Arrays.sort(newServerNums);//快排,时间复杂度 O(klogk)
    List<Integer> results = new ArrayList<>();
    for (int i = 0; i < k; i++) 
      if (serverNums[i] == newServerNums[k - 1]) 
        results.add(i);
      
    
    //System.out.println(Arrays.toString(serverNums));
    return results;
  

  private void recurse(int index, int newIndex, int[] arrival, int[] load, int[] serverTimes,
      int[] serverNums) 
    int server = newIndex % serverNums.length;
    if (index < arrival.length && newIndex - index < serverTimes.length) 
      if (serverTimes[server] > arrival[index]) 
        recurse(index, ++newIndex, arrival, load, serverTimes, serverNums);
       else 
        serverTimes[server] = arrival[index] + load[index];
        serverNums[server]++;
      
    
  



复杂度分析:
时间复杂度:时间复杂度,O(nk+klogk),其中 k为服务器的数目,n为请求的数目。
空间复杂度:O(k)。

以上是关于JAVA找到处理最多请求的服务器——力扣每日一题(2022.03.30)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA找到处理最多请求的服务器——力扣每日一题(2022.03.30)

JAVA找到处理最多请求的服务器——力扣每日一题(2022.03.30)

力扣每日一题 502. IPO [贪心+优先队列]

力扣每日一题:剑指offer05——替换空格

《LeetCode之每日一题》:143.IPO

JAVA自除数——力扣每日一题(2022.03.31)