tft每日頭條

 > 生活

 > 一維數組最大值的算法

一維數組最大值的算法

生活 更新时间:2024-07-17 19:19:05
題目描述

給定兩個有序數組,如何在O(log(m n))的時間複雜度下求中位數;

如:[1,4][2,3] -> 2.5

[1,6],[5] -> 2

一維數組最大值的算法(每周一道算法題)1

思路分析

如果沒有時間複雜度要求,借助歸并排序的思路,可以在O(m n)的時間複雜度下求解;

大體邏輯如下:

兩個指針分别指向兩個數組的頭部,然後每次移動元素更小的指針,直到移動到中位數的位置;注意邊界的處理,以及奇偶元素的處理即可;

但這個時間複雜度不滿足題目描述要求;

一維數組最大值的算法(每周一道算法題)2

最佳思路分析

這個問題的前提是有序數組,并且涉及到查找元素,所以很容易聯系到二分查找算法;

假如兩個數組分别為a和b,元素個數分别為m和n;從a的中間元素開始處理,判斷這個中間元素在b中的位置,時間複雜度log(n);

如果發現這個位置小于中位數的位置,那麼就再取a中位于中間位置和結束位置中間的元素判斷;

如果大于中位數的位置,那麼就取a中起始位置和中間位置中間的元素,再進行判斷;

如果恰好是中位數的位置,則可以直接處理;

這樣時間複雜度為O(log(m n))

如果元素不在a中,那麼隻需要将a,b互換,重複即可;

總的時間複雜度為2 * O(log(m n)) ,按照時間複雜度計算 即:O(log(m n))

一維數組最大值的算法(每周一道算法題)3

代碼量比較大,需要源碼的關注并回複“第一周算法”即可;

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved