日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字节跳动2018校招算法方向(第一批) —— 1-最外层点

發布時間:2024/5/17 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节跳动2018校招算法方向(第一批) —— 1-最外层点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

時間限制:C/C++ 1秒,其他語言2秒

空間限制:C/C++ 32M,其他語言64M

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

Ideas

首先可以發現所有 ”最大“ 點都在右上方圍了一圈,因此可以利用這個特征來做題。

先把所有的點都按照y值排序,那么y值最大的那個點肯定是右下角的“最大”點,記為p0,然后按照y值依次往前遍歷,遍歷到p點的x值是大于前一個p點的x值,說明找到了一個“最大”點。

Code

Python

Python的代碼只能過 9/10 組用例,最后一個內存超限,求大佬指點,怎么能過最后一組數據,我感覺可以優化的地方在處理輸入的位置,暫時沒想到更好的優化方案。

if __name__ == '__main__':point_list = []n = int(input())for _ in range(n):point_list.append(tuple(map(int, input().split())))max_x = 0point_list.sort(key=lambda x: x[1])for i in range(n - 1, -1, -1):if point_list[i][0] > max_x:print(f"{point_list[i][0]} {point_list[i][1]}")max_x = point_list[i][0] 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的字节跳动2018校招算法方向(第一批) —— 1-最外层点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。