【2018年最新】iOS面試題之算法

1、不用中間變量,用兩種方法交換A和B的值
// 1.中間變量
void swap(int a, int b) {
   int temp = a;
   a = b;
   b = temp;
}

// 2.加法
void swap(int a, int b) {
   a = a + b;
   b = a - b;
   a = a - b;
}

// 3.異或(相同為0,不同為1. 可以理解為不進位加法)
void swap(int a, int b) {
   a = a ^ b;
   b = a ^ b;
   a = a ^ b;
}
2、求最大公約數(shù)
/** 1.直接遍歷法 */
int maxCommonDivisor(int a, int b) {
    int max = 0;
    for (int i = 1; i <=b; i++) {
        if (a % i == 0 && b % i == 0) {
            max = i;
        }
    }
    return max;
}
/** 2.輾轉(zhuǎn)相除法 */
int maxCommonDivisor(int a, int b) {
    int r;
    while(a % b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return b;
}

// 擴展:最小公倍數(shù) = (a * b)/最大公約數(shù)
3、模擬棧操作
  • 棧是一種數(shù)據(jù)結(jié)構(gòu)婚温,特點:先進后出
  • 練習(xí):使用全局變量模擬棧的操作
#include <stdio.h>
#include <stdbool.h>
#include <assert.h>

//保護全局變量:在全局變量前加static后,這個全局變量就只能在本文件中使用
static int data[1024];//棧最多能保存1024個數(shù)據(jù)
static int count = 0;//目前已經(jīng)放了多少個數(shù)(相當(dāng)于棧頂位置)

//數(shù)據(jù)入棧 push
void push(int x){
    assert(!full());//防止數(shù)組越界
    data[count++] = x;
}
//數(shù)據(jù)出棧 pop
int pop(){
    assert(!empty());
    return data[--count];
}
//查看棧頂元素 top
int top(){
    assert(!empty());
    return data[count-1];
}

//查詢棧滿 full
bool full() {
    if(count >= 1024) {
        return 1;
    }
     return 0; 
}

//查詢椣狈瘢空 empty
bool empty() {
    if(count <= 0) {
        return 1;
    }
    return 0;
}

int main(){
    //入棧
    for (int i = 1; i <= 10; i++) {
        push(i);
    }
  
    //出棧
    while(!empty()){
        printf("%d ", top()); //棧頂元素
        pop(); //出棧
    }
    printf("\n");
    
    return 0;
}
4栅螟、排序算法

選擇排序荆秦、冒泡排序、插入排序三種排序算法可以總結(jié)為如下:

都將數(shù)組分為已排序部分和未排序部分力图。

  1. 選擇排序?qū)⒁雅判虿糠侄x在左端步绸,然后選擇未排序部分的最小元素和未排序部分的第一個元素交換。
  2. 冒泡排序?qū)⒁雅判虿糠侄x在右端吃媒,在遍歷未排序部分的過程執(zhí)行交換瓤介,將最大元素交換到最右端。
  3. 插入排序?qū)⒁雅判虿糠侄x在左端赘那,將未排序部分元的第一個元素插入到已排序部分合適的位置刑桑。
4.1、選擇排序
  • 【選擇排序】:最值出現(xiàn)在起始端
  • 第1趟:在n個數(shù)中找到最小(大)數(shù)與第一個數(shù)交換位置
  • 第2趟:在剩下n-1個數(shù)中找到最小(大)數(shù)與第二個數(shù)交換位置
  • 重復(fù)這樣的操作...依次與第三個募舟、第四個...數(shù)交換位置
  • 第n-1趟祠斧,最終可實現(xiàn)數(shù)據(jù)的升序(降序)排列。
void selectSort(int *arr, int length) {
    for (int i = 0; i < length - 1; i++) { //趟數(shù)
        for (int j = i + 1; j < length; j++) { //比較次數(shù)
            if (arr[i] > arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
4.2拱礁、冒泡排序
  • 【冒泡排序】:相鄰元素兩兩比較琢锋,比較完一趟,最值出現(xiàn)在末尾
  • 第1趟:依次比較相鄰的兩個數(shù)呢灶,不斷交換(小數(shù)放前吴超,大數(shù)放后)逐個推進,最值最后出現(xiàn)在第n個元素位置
  • 第2趟:依次比較相鄰的兩個數(shù)鸯乃,不斷交換(小數(shù)放前鲸阻,大數(shù)放后)逐個推進,最值最后出現(xiàn)在第n-1個元素位置
  • …… ……
  • 第n-1趟:依次比較相鄰的兩個數(shù)缨睡,不斷交換(小數(shù)放前赘娄,大數(shù)放后)逐個推進,最值最后出現(xiàn)在第2個元素位置
void bublleSort(int *arr, int length) {
    for(int i = 0; i < length - 1; i++) { //趟數(shù)
        for(int j = 0; j < length - i - 1; j++) { //比較次數(shù)
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        } 
    }
}
5宏蛉、折半查找(二分查找)
  • 折半查找:優(yōu)化查找時間(不用遍歷全部數(shù)據(jù))
  • 折半查找的原理:
  • 1> 數(shù)組必須是有序的
  • 2> 必須已知min和max(知道范圍)
  • 3> 動態(tài)計算mid的值,取出mid對應(yīng)的值進行比較
  • 4> 如果mid對應(yīng)的值大于要查找的值性置,那么max要變小為mid-1
  • 5> 如果mid對應(yīng)的值小于要查找的值拾并,那么min要變大為mid+1

// 已知一個有序數(shù)組, 和一個key, 要求從數(shù)組中找到key對應(yīng)的索引位置

int findKey(int *arr, int length, int key) {
    int min = 0, max = length - 1, mid;
    while (min <= max) {
        mid = (min + max) / 2; //計算中間值
        if (key > arr[mid]) {
            min = mid + 1;
        } else if (key < arr[mid]) {
            max = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

qq技術(shù)交流群


qq交流群.jpeg

作者微信公眾號


微信公眾號.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鹏浅,隨后出現(xiàn)的幾起案子嗅义,更是在濱河造成了極大的恐慌,老刑警劉巖隐砸,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件之碗,死亡現(xiàn)場離奇詭異,居然都是意外死亡季希,警方通過查閱死者的電腦和手機褪那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門幽纷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人博敬,你說我怎么就攤上這事友浸。” “怎么了偏窝?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵收恢,是天一觀的道長。 經(jīng)常有香客問我祭往,道長伦意,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任硼补,我火速辦了婚禮驮肉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘括勺。我一直安慰自己缆八,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布疾捍。 她就那樣靜靜地躺著奈辰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乱豆。 梳的紋絲不亂的頭發(fā)上奖恰,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音宛裕,去河邊找鬼瑟啃。 笑死,一個胖子當(dāng)著我的面吹牛揩尸,可吹牛的內(nèi)容都是我干的蛹屿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼岩榆,長吁一口氣:“原來是場噩夢啊……” “哼错负!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勇边,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤犹撒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粒褒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體识颊,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年奕坟,在試婚紗的時候發(fā)現(xiàn)自己被綠了祥款。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片清笨。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镰踏,靈堂內(nèi)的尸體忽然破棺而出函筋,到底是詐尸還是另有隱情,我是刑警寧澤奠伪,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布跌帐,位于F島的核電站,受9級特大地震影響绊率,放射性物質(zhì)發(fā)生泄漏谨敛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一滤否、第九天 我趴在偏房一處隱蔽的房頂上張望脸狸。 院中可真熱鬧,春花似錦藐俺、人聲如沸炊甲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卿啡。三九已至,卻和暖如春菱父,著一層夾襖步出監(jiān)牢的瞬間颈娜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工浙宜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留官辽,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓粟瞬,卻偏偏與公主長得像同仆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子裙品,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 設(shè)計模式是什么俗批? 你知道哪些設(shè)計模式,并簡要敘述清酥? 設(shè)計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類型的...
    如果我們是朋友閱讀 669評論 0 9
  • 設(shè)計模式是什么蕴侣? 你知道哪些設(shè)計模式焰轻,并簡要敘述?設(shè)計模式是一種編碼經(jīng)驗昆雀,就是用比較成熟的邏輯去處理某一種類型的事...
    irenb閱讀 5,183評論 1 20
  • 設(shè)計模式是什么辱志? 你知道哪些設(shè)計模式蝠筑,并簡要敘述? 設(shè)計模式是一種編碼經(jīng)驗揩懒,就是用比較成熟的邏輯去處理某一種類型的...
    small_Sun閱讀 450評論 0 4
  • 排序的基本概念 在計算機程序開發(fā)過程中什乙,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個關(guān)鍵字進行排序,排序完成的序列可用于快...
    Jack921閱讀 1,418評論 1 4
  • 都覺得自己快變成雨神了, 7月去華山大暑智亮、大雨 好吧忆某,青石板留著的是我的夢啊, 就算烏云密布阔蛉, 不是遇見陽光就可以...
    橘梓閱讀 188評論 0 1