找最外层点

来源:互联网 发布:怎么向淘宝投诉卖家 编辑:程序博客网 时间:2024/05/16 08:48

这是头条内推的一道题目,事后写一个python版本

问题描述:

p 为给定二维平面整数点集,定义 p中某点x,如果x满足p中任意的点都不在x的右上方区域内(横纵坐标都大于x),则称其为“最大的”,求出所有“最大点”的集合,并按横坐标由小到大排好。如图中的点集,其中的实心点红色点就是要求的点


# -*- coding:utf-8 -*-"""5(1,2)(5,3)(4,6)(7,5)(9,0)output:(4 6)(7 5)(9 0)"""def findpoints():    nums = input('total numbers:')    points = []    result = []    for i in range(0, nums):        x = input('x:')        y = input('y:')        points.append((x, y))    points.sort()  # 排序,元组排序会先按第一个数排,再按第二个数排    max_x2y = points[nums - 1][1]    result.append(points[nums - 1])    for j in range(nums - 2, -1, -1):  # 倒过来求        for k in range(j + 1, nums):            if points[j][1] < points[k][1]:                break        if k == nums - 1 and points[j][1] > max_x2y:            result.insert(0, points[j])  # 每次都插在头,最后自动有序    print resultfindpoints()