c語言鏈表排序算法 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?因?yàn)檫@是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最
一道java面試題,20億數(shù)字的文本排序,如何取前100?
因?yàn)檫@是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最后100個元素就是結(jié)果??臻g復(fù)雜度是k,時間復(fù)雜度是nlogk
我猜你問過人們JDK各種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)原理。事實(shí)上,我一直很困惑。了解基本的實(shí)現(xiàn)原則是可以的,但是如果你不太了解,那又怎樣呢?人們知道哪些數(shù)據(jù)結(jié)構(gòu)適用于哪些場景,并且能夠熟練地使用它們。那不是。。。夠了嗎?對貴公司的需求不足嗎?你希望他為你的公司創(chuàng)建一個新的數(shù)據(jù)結(jié)構(gòu)嗎?就像two peas或JDK一樣,JDK的數(shù)據(jù)結(jié)構(gòu)性能遇到了瓶頸,求職者會給你提供比工作提供的數(shù)據(jù)結(jié)構(gòu)更好的數(shù)據(jù)結(jié)構(gòu)。
面一個5年java,不知數(shù)據(jù)結(jié)構(gòu),卻大談分布式,這樣的能要嗎?
算法當(dāng)然不是最重要的,這在大多數(shù)情況下都是正確的。你的上司基本上是對的。
作為一名技術(shù)人員,您的工作目標(biāo)是什么?首先是滿足商業(yè)需求。技術(shù)總監(jiān)關(guān)心進(jìn)度、質(zhì)量、成本、風(fēng)險等因素。至于算法,在他看來,可能只是錦上添花。例如,系統(tǒng)設(shè)計所需的響應(yīng)時間為3秒,目前為2秒。您已經(jīng)通過算法優(yōu)化實(shí)現(xiàn)了1秒,但這并沒有改變項(xiàng)目的性能。
業(yè)界有句好話,沒有商業(yè)討論的技術(shù)是在耍流氓。當(dāng)你單獨(dú)談?wù)撍惴〞r,你也被懷疑是在耍流氓。作為一個程序員,首要考慮的是滿足需求。至于算法和實(shí)現(xiàn),可能有一百種。
現(xiàn)在大多數(shù)程序員只需調(diào)用現(xiàn)有代碼庫中的方法,這些類庫中的大多數(shù)都可以滿足要求。您不需要實(shí)現(xiàn)鏈表、二叉樹和新的排序算法。利用這些現(xiàn)有的代碼庫,我們可以用多種方法來實(shí)現(xiàn)函數(shù),所以所謂的算法就不那么重要了。
因此,您應(yīng)該首先對需求有深入的了解,然后實(shí)施它。然后我們考慮了算法問題。這應(yīng)該是你們大副的意圖。