目录

题目

思路

Code


题目

公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。
过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,要求p1<p2
员工个数,取值范国:0<n<100000
员工ID为整数,取值范围:0<=n<=100000
考试成绩为整数,取值范围:0<=score<=300
输入描述
员工的ID及考试分数
输出描述
分差最小的员工ID对(p1,p2)列表,要求p1<p2。每一行代表一个集合,每个集合内的员工ID按顺序排列,多行结果也以员工对中p1值大小升序排列(如果p1相同则p2升序)。

示例1:
输入:

5
1 90
2 91
3 95
4 96
5 100
输出:
1 2
3 4
说明:
输入: 第一行为员工个数n,后续的n行第一个数值为员工ID,第二个数值为员工考试分数输出:员工1和员工2的分差为1,员工3和员工4的分差也为1,因此最终结果为
1 2
3 4

示例2:

输入:
5
1 90
2 91
3 92
4 85
5 86
输出:
1 2
2 3
4 5

思路

1:第一步,对所有的分数进行排序,找到最小的分差。

2:第二步,对排序后的所有员工分数进行统计,满足最小分差,则输出。

3:也算是个简单了,考的还是经典的自定义排序。

编辑

Code

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
from queue import Queue
 
class Employee:
    def __init__(self, id, score):
        self.id = id 
        self.score = score
 
def comp(a,b):
    return a.score - b.score

count = int(input())
all_employee = []
pairs = []
#最大差就是300
min_val = 300

for i in range(count):
    params = [int(x) for x in input().split(" ")]
    all_employee.append(Employee(params[0], params[1]))

#按照分数
all_employee = sorted(all_employee, key=functools.cmp_to_key(comp))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

【华为od机试真题Python+JS+Java合集】【超值优惠】: Py/JS/Java合集

【华为od机试真题Python】: Python真题题库

【华为od机试真题JavaScript】: JavaScript真题题库

【华为od机试真题Java】: Java真题题库

【华为od机试真题C++】: C++真题题库

【华为od机试真题C语言】: C语言真题题库

【华为od面试手撕代码题库】: 面试手撕代码题库

【华为od机试面试交流群:830285880】