通常來講 兩個陣列 中找出乙個有效的陣列
就是兩個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...
乙個陣列實現兩個棧
乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...
乙個陣列實現兩個棧
乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...