編程題:找最外層的座標點

牛客上的一道編程題

P爲給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其爲“最大的”。求出所有“最大的”點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[0, 1e9) 內)
請實現代碼找到集合 P 中的所有 ”最大“ 點的集合並輸出。
輸入描述:
第一行輸入點集的個數 N, 接下來 N 行,每行兩個數字代表點的 X 軸和 Y 軸。
對於 50%的數據, 1 <= N <= 10000;
對於 100%的數據, 1 <= N <= 500000;
輸出描述:
輸出“最大的” 點集合, 按照 X 軸從小到大的方式輸出,每行兩個數字分別代表點的 X 軸和 Y軸。
輸入例子1:
5
1 2
5 3
4 6
7 5
9 0
輸出例子1:
4 6
7 5
9 0

時間空間要求有點嚴格,但思路還是很清晰的,對所有數據按照x的大小排序,從最後一個開始往左找,如果y值大於max_y值說明右上角區域沒有其他點:

n = int(input())
data = []
for i in range(n):
    data.append(list(map(int, input().split())))
data.sort()  # 先按照x大小排序
res = [data[-1]]  # x最大的肯定是
max_y = data[-1][1]  # 記錄最大y
for i in range(len(data)-2, -1, -1):
    y = data[i][1]
    if y>max_y:  # 說明右上區域沒點
        max_y = y
        res.append(data[i])
for x, y in res[::-1]:
    print(str(x)+' '+str(y))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章