ios 通過兩個陣列抽取乙個有效陣列的演算法

2021-08-15 20:35:28 字數 2367 閱讀 7370

通常來講 兩個陣列 中找出乙個有效的陣列

就是兩個for迴圈 外層迴圈i 記憶體迴圈 j 就可以把有效資料取出來了。

但是呢 我們公司的資料 有時候第乙個陣列就幾千個 第二個陣列也幾千個

比如1000 *1000 就10 的6次方的計算次數了。

直接讓計算機算 會非常耗時。

需求是:

我的解決方案是兩個時間排序。

第乙個陣列排序 第二個陣列排序

排完順序以後就開始遍歷第乙個陣列

並取出第二個陣列的第一項來對比,一旦對比到了,就新增進去,然後繼續對比,

一直對比到超出了第二個陣列的第一項的範圍,就馬上取第二個陣列的下一項,

注意 如果第二個陣列已經全取完了。

也直接結束掉,這樣 整個過程只有一次迴圈 ,效率提公升很大乙個檔次。

上** ,

注意一下,

我的第乙個陣列是正序的,第二個陣列是倒序的,所以遍歷是倒著來的。

進入條件就是在前後15秒範圍內,跳出條件就是超過了前後15秒範圍,當k <0代表第二個陣列取完,(i + 1)> = jsonarray.count代表是最後一項了,不需要繼續判斷了也跳出,其餘的部分是列印,和一些字典的轉換`

- (void)getredtslist:(nsarray *)sectionarr andjson:(nsarray *)jsonarray andcomlpleteblock:(void (^)(nsarray *object))completeblock

nsdictionary *infodic = jsonarray[i];//白色時間段

nsstring *starttimestr = infodic[@"videostarttime"];

nsstring *endtimestr = infodic[@"videoendtime"];

nsinteger starttime = [self formattimeformstring:starttimestr];

nsinteger endtime = [self formattimeformstring:endtimestr];//第乙個陣列的starttime 和endtime

nsdictionary *eventdic = sectionarr[k];//取出第二個陣列第k項,

nsstring *redtimelabel = eventdic[@"eventoddurtime"];

nsinteger redtime = [self formattimeformstring:redtimelabel];//取出第k項的redtime

// nslog(@"starttime = %@ %ld endtime = %@ %ld redtime = %@ %ld",starttimestr,(long)starttime,endtimestr,(long)endtime,redtimelabel,(long)redtime);

if ((redtime- 15)< starttime && endtime< (redtime + 15) ) //第乙個陣列到了最後一項 直接跳出

nsdictionary *infodic1 = jsonarray[i+1];//白色時間段

nsstring *starttimestr1 = infodic1[@"videostarttime"];

nsstring *endtimestr1 = infodic1[@"videoendtime"];

nsinteger starttime1 = [self formattimeformstring:starttimestr1];

nsinteger endtime1 = [self formattimeformstring:endtimestr1];//第乙個陣列下一項的starttime 和endtime

// nslog(@"starttime = %@ %ld endtime = %@ %ld redtime = %@ %ld 在前後15秒範圍內 下一項的時間開始starttimestr1 = %@ %ld 結束時間 endtimestr1 = %@ %ld",starttimestr,(long)starttime,endtimestr,(long)endtime,redtimelabel,(long)redtime,starttimestr1,(long)starttime1,endtimestr1,(long)endtime1);

if ((redtime+ 15) <= starttime1)

if ((redtime+ 15) <= endtime1) }}

nslog(@"開始過濾 過濾結束");

completeblock(redjsonarr);

}

乙個陣列實現兩個棧

題目 乙個陣列a 1.n 來實現兩個棧,使得兩個棧中的元素總和不到n時,兩個都不會發生上溯。思路 1 建立乙個陣列,分別從兩邊開始,依次往中間走。思路 2 建立乙個陣列,乙個走奇數字,乙個走偶數字。奇偶方式 define crt secure no warnings includeusing nam...

乙個陣列實現兩個棧

乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...

乙個陣列實現兩個棧

乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...