[leetcode/lintcode 题解] 算法面试真题详解:安排面试城市

简介: [leetcode/lintcode 题解] 算法面试真题详解:安排面试城市

描述
今天有N个面试者需要面试,公司安排了两个面试的城市A和B,每一个面试者都有到A城市的开销costA和到B城市的开销costB。公司需要将面试者均分成两拨,使得total cost最小。

  • N是偶数
  • 2≤N≤105
  • 答案确保在int范围内
  • 1≤costA,costB≤106

题目要求去A的人数和去B的人数相等。

在线评测地址:领扣题库官网

样例1
输入: 
cost = [[5,4],[3,6],[1,8],[3,9]]
输出: 
14
说明: 
第一个和第二个人去B城市,剩下的去A城市

解题思路
对于每一个人去A城市的距离减去B城市的距离,从小到大进行排序,前一半的人去A城市,后一半的人去B城市。

复杂度分析
时间复杂度:O(nlogn)
需要进行排序,排序算法时间为nlogn。
空间复杂度:O(1)
不需要开辟新的空间。

源代码

public class Solution {
    
    public int TotalCost(List<List<Integer>> cost) {
        Comparator<List<Integer>> cmp = new Comparator<List<Integer>>() {
            public int compare(List<Integer> first,List<Integer> second) {
                if (first.get(1) - first.get(0) == second.get(1) - second.get(0)) {
                    
                    return 0;
                }
                else if (first.get(1) - first.get(0) < second.get(1) - second.get(0)) {
                    
                    return -1;
                }
                else {
                    
                    return 1;
                }
            }
        };
        
        Collections.sort(cost, cmp);
        int answer = 0;
                int length = cost.size();
                int j = 0;
                for (int i = 0; i < length; i++) {
                        if (2 * j < length) {
                            answer += cost.get(i).get(1);
                        }
                        else {
                            answer += cost.get(i).get(0);
                        }
                        j++;
                }
                
        return answer;
    }
}

更多题解参考:九章官网solution

相关文章
|
15天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
17 2
|
15天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
15 2
|
18天前
|
存储 算法 调度
力扣中级算法(Python)
力扣中级算法(Python)
|
18天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
18天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
12天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
3天前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。