zoukankan      html  css  js  c++  java
  • Amazon | OA 2019 | Optimal Utilization

    Given 2 lists a and b. Each element is a pair of integers where the first integer represents the unique id and the second integer represents a value. Your task is to find an element from a and an element form b such that the sum of their values is less or equal to target and as close to target as possible. Return a list of ids of selected elements. If no pair is possible, return an empty list.
    
    Example 1:
    
    Input:
    a = [[1, 2], [2, 4], [3, 6]]
    b = [[1, 2]]
    target = 7
    
    Output: [[2, 1]]
    
    Explanation:
    There are only three combinations [1, 1], [2, 1], and [3, 1], which have a total sum of 4, 6 and 8, respectively.
    Since 6 is the largest sum that does not exceed 7, [2, 1] is the optimal pair.
    Example 2:
    
    Input:
    a = [[1, 3], [2, 5], [3, 7], [4, 10]]
    b = [[1, 2], [2, 3], [3, 4], [4, 5]]
    target = 10
    
    Output: [[2, 4], [3, 2]]
    
    Explanation:
    There are two pairs possible. Element with id = 2 from the list `a` has a value 5, and element with id = 4 from the list `b` also has a value 5.
    Combined, they add up to 10. Similarily, element with id = 3 from `a` has a value 7, and element with id = 2 from `b` has a value 3.
    These also add up to 10. Therefore, the optimal pairs are [2, 4] and [3, 2].
    Example 3:
    
    Input:
    a = [[1, 8], [2, 7], [3, 14]]
    b = [[1, 5], [2, 10], [3, 14]]
    target = 20
    
    Output: [[3, 1]]
    Example 4:
    
    Input:
    a = [[1, 8], [2, 15], [3, 9]]
    b = [[1, 8], [2, 11], [3, 12]]
    target = 20
    
    Output: [[1, 3], [3, 2]]

    2-Pointers

    Syntax side: Pay attention to how to print an array:   System.out.println(Arrays.toString(int[] item));

     1 import java.util.*;
     2 /**
     3  * https://leetcode.com/discuss/interview-question/373202
     4  */
     5 public class OptimalUtilization {
     6     public List<int[]> optimal(List<int[]> a, List<int[]> b, int target) {
     7         if (a == null || a.isEmpty() || b == null || b.isEmpty()) {
     8             return new ArrayList<int[]>();
     9         }
    10 
    11         Collections.sort(a, (a1, a2) -> Integer.compare(a1[1], a2[1]));
    12         Collections.sort(b, (b1, b2) -> Integer.compare(b1[1], b2[1]));
    13         int m = a.size();
    14         int n = b.size();
    15         int i = 0;
    16         int j = n - 1;
    17         List<int[]> result = new ArrayList<>();
    18         int max = Integer.MIN_VALUE;
    19         while (i < m && j >= 0) {
    20             int sum = a.get(i)[1] + b.get(j)[1];
    21             if (sum <= target) {
    22                 // maybe duplicate ele
    23                 if (sum > max) {
    24                     result.clear();
    25                     max = sum;
    26                     result.add(new int[]{a.get(i)[0], b.get(j)[0]});
    27                 } else if (sum == max) {
    28                     result.add(new int[]{a.get(i)[0], b.get(j)[0]});
    29                 }
    30                 i++;
    31             } else {
    32                 j--;
    33             }
    34         }
    35         return result;
    36     }
    37     
    38     public static void main(String[] args) {
    39         OptimalUtilization sol = new OptimalUtilization();
    40         List<int[]> aa = new ArrayList<>();
    41         aa.add(new int[]{1, 8});
    42         aa.add(new int[]{2, 15});
    43         aa.add(new int[]{3, 9});
    44         List<int[]> bb = new ArrayList<>();
    45         bb.add(new int[]{1, 8});
    46         bb.add(new int[]{2, 11});
    47         bb.add(new int[]{3, 12});
    48         List<int[]> res = sol.optimal(aa, bb, 20);
    49         for (int[] item : res) {
    50             System.out.println(Arrays.toString(item));
    51         }
    52     }
    53 }
  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/11750233.html
Copyright © 2011-2022 走看看