繩子可以覆蓋的最多點數

2021-06-19 13:10:43 字數 376 閱讀 9706

有網友指出,我的演算法其實沒必要申請多餘的陣列,那麼有沒有更加高效的演算法呢,我身邊的乙個大神給了我乙個o(n)複雜度的演算法:

他的原話:兩個指標,乙個front,乙個rear,每次front-rear,比l小,看覆蓋的點數。儲存覆蓋點數的最大值,然後front++;比l大,rear++,每個數最多遍歷2遍,複雜度o(n)。

對於這個演算法,他給了乙個形象的比喻:

就好像一條長度為l的蛇。頭伸不過去的話,就把尾巴縮過來最多隻需要走一次,就知道能覆蓋幾個點

int line(int a,int n,int len)

else

rear++;

}return maxnum+1;

}

定長繩子最多覆蓋點

題目描述 數軸上從左到右有n個點,a 0 a 1 a n 1 給定一根長度為l繩子,求繩子最多覆蓋其中幾個點?以下面的陣列為例子,如果繩子長度為4,那麼最多覆蓋的點數應該是568這三個點 int a 5 把繩子想成一條蛇。如果長度小於4,那麼就頭一直增長,增長到4的話,就把尾部收短一些,之後就是頭伸...

POJ 1981 定長圓覆蓋最多點

題意 一些點,求乙個單位圓最多能覆蓋的點的個數,不存在兩點距離恰好為2.題解 暴力列舉兩個點,求圓心,然後列舉每個點驗證是否在圓內。n 3的,可以過 當然還有n 2logn的轉化為求圓的最大弧的覆蓋次數問題 以後做ciru 的時候也會用到這個技術 n 3view code 1 include 2 i...

149 直線上最多的點數

思路 先用map將輸入的點去重 這裡要自定義比較函式 然後對於每乙個點,遍歷其後面的每乙個點,記錄在一條直線上的點的數目,在記錄的過程中維護最大值。開始時在map的自定義比較函式上面卡了殼,為此還得到codeblock這種ide除錯才看的出來,用vs的話比較函式少了const照樣能執行 defini...