iOS常見算法題

1、二分查找
已知一個(gè)有序數(shù)組, 和一個(gè) key, 要求從數(shù)組中找到 key 對(duì)應(yīng)的索引位置

int binaryFind(int *arr,int len,int key){
    int min=0,max=len-1,mid;
    while (min <= max) {
        mid = (min+max)/2;
        if (key < arr[mid]) {
            max = mid-1;
        } else if (key > arr[mid]) {
            min = mid+1;
        } else {
            return mid;
        }
    }
    return -1;
}

2棕孙、字符串反轉(zhuǎn)

- (void)strReverseTest{
    char str[] = "32415";
    int len = strlen(str);
    for (int i=0; i<(len+1)/2; i++) {
        char temp = str[i];
        str[i] = str[len-1-i];
        str[len-1-i] = temp;
    }
    NSLog(@"%s",str); // C中打印數(shù)組得for循環(huán),不方便
}

3、有序數(shù)組合并
將有序數(shù)組 {1,4,6,7,9} 和 {2,3,5,6,8,9,10,11,12} 合并為 {1,2,3,4,5,6,6,7,8,9,9,10,11,12}

- (void)arrayMergeTest {
    int a[] = {1,4,6,7,9};
    int b[] = {2,3,5,6,8,9,10,11,12};
    int lenA=5,lenB=9,result[lenA+lenB],i=0,j=0,k=0;
    while (i<lenA && j<lenB) {
        if (a[i]<b[j]) {
            result[k++] = a[i++];
        } else {
            result[k++] = b[j++];
        }
    }
    while (i<lenA) {
        result[k++] = a[i++];
    }
    while (j<lenB) {
        result[k++] = b[j++];
    }
    NSLog(@"end");
}

4、查找兩個(gè)子視圖的共同父視圖

- (NSMutableArray*)findSuperview:(UIView*)view {
    NSMutableArray *array = [NSMutableArray array];
    UIView*spView = view.superview;
    while (spView) {
        [array addObject:spView];
        spView = spView.superview;
    }
    return array;
}
- (NSMutableArray*)findCommonSuperview:(UIView*)view1 view2:(UIView*)view2{
    NSMutableArray *array = [NSMutableArray array];
    NSArray *superviews1 = [self findSuperview:view1];
    NSArray *superviews2 = [self findSuperview:view2];
    int len = MIN(superviews1.count,superviews2.count);
    for (int i=0; i<len; i++) {
        UIView *super1 = superviews1[superviews1.count-1-i];
        UIView *super2 = superviews2[superviews2.count-1-i];
        if (super1 == super2) {
            [array addObject:super1];
        } else {
            break;
        }
    }
    return array;
}

5儒恋、求無序數(shù)組中的中位數(shù)
中位數(shù):數(shù)組中最中間的那個(gè)數(shù)或最中間的那兩個(gè)數(shù)的平均值
思路:先排序,再求中位數(shù)

float midValue(int arr[], int len){
    float mid = (len%2 == 0) ? (arr[len/2] + arr[len/2-1])/2.0 : arr[len/2];
    return mid;
}
void midValueSort(int arr[], int len){
    for (int i=0; i<len; i++) {
        for (int j=0; j<len-1-i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}
- (void)midValueTest {
    int arr[] = {5,1,3,6,100,8};
    midValueSort(arr,6);
    float mid = midValue(arr, 6);
    NSLog(@"%.1f",mid);
    
}

6黔漂、Hash算法
例:在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符[核心思想:生成一個(gè)數(shù)組,數(shù)組中存儲(chǔ)每個(gè)字符出現(xiàn)的次數(shù)]

char findFirstChar(char cha[], int len) {
    char result = '\0';
    int arr[128];
    for (int i = 0; i < 128; i++) {
        arr[i] = 0;
    }
    for (int i = 0; i < len; i++) {
        arr[cha[i]]++;
    }
    for (int i = 0; i < len; i++) {
        if (arr[cha[i]] == 1) {
            result = cha[i];
            break;
        }
    }
    return result;
}
- (void)findFirstCharTest {
    char cha[] = "aabbcdddf";
    char result = findFirstChar(cha, 9);
    NSLog(@"%c",result);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诫尽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炬守,更是在濱河造成了極大的恐慌牧嫉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件减途,死亡現(xiàn)場(chǎng)離奇詭異酣藻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鳍置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門辽剧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人税产,你說我怎么就攤上這事怕轿。” “怎么了辟拷?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵撞羽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我衫冻,道長(zhǎng)诀紊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任隅俘,我火速辦了婚禮渡紫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘考赛。我一直安慰自己惕澎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布颜骤。 她就那樣靜靜地躺著唧喉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上八孝,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天董朝,我揣著相機(jī)與錄音,去河邊找鬼干跛。 笑死子姜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楼入。 我是一名探鬼主播哥捕,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嘉熊!你這毒婦竟也來了遥赚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤阐肤,失蹤者是張志新(化名)和其女友劉穎凫佛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孕惜,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愧薛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衫画。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毫炉。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碧磅,靈堂內(nèi)的尸體忽然破棺而出碘箍,到底是詐尸還是另有隱情,我是刑警寧澤鲸郊,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布丰榴,位于F島的核電站,受9級(jí)特大地震影響秆撮,放射性物質(zhì)發(fā)生泄漏四濒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一职辨、第九天 我趴在偏房一處隱蔽的房頂上張望盗蟆。 院中可真熱鬧,春花似錦舒裤、人聲如沸喳资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仆邓。三九已至鲜滩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間节值,已是汗流浹背徙硅。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搞疗,地道東北人嗓蘑。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像匿乃,于是被迫代替她去往敵國和親桩皿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 字符串反轉(zhuǎn) 鏈表反轉(zhuǎn) 有序數(shù)組合并 Hash算法 查找兩個(gè)子視圖的共同父視圖 求無序數(shù)組當(dāng)中的中位數(shù) 一扳埂、字符串反...
    luonaerduo閱讀 343評(píng)論 0 0
  • 字符串反轉(zhuǎn) 鏈表反轉(zhuǎn) 有序數(shù)組合并 Hash算法 查找兩個(gè)子視圖的共同父視圖 求無序數(shù)組當(dāng)中的中位數(shù) 一业簿、字符串反...
    Theendisthebegi閱讀 17,271評(píng)論 8 59
  • 1瘤礁、不用中間變量,用兩種方法交換A和B的值 2阳懂、求最大公約數(shù) 3、模擬棧操作 棧是一種數(shù)據(jù)結(jié)構(gòu)柜思,特點(diǎn):先進(jìn)后出 -...
    _小迷糊_997閱讀 3,327評(píng)論 0 16
  • 目錄 1 左神部分集錦 2 Leetcode前150題 3 叛业鳎客網(wǎng)劍指offer 4 JavaG 5 題目中的...
    小小千千閱讀 991評(píng)論 0 0
  • 字符串反轉(zhuǎn) 鏈表反轉(zhuǎn) 有序數(shù)組合并 Hash算法 查找兩個(gè)子視圖的共同父視圖 求無序數(shù)組當(dāng)中的中位數(shù) 一、字符串反...
    張無奈閱讀 168評(píng)論 0 0