在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ 回?cái)?shù)
hash表
單詞統(tǒng)計(jì)
鏈表排序
查找
可變參數(shù)
爬樓梯
內(nèi)存
prim算法 中
線性結(jié)構(gòu)的處理
數(shù)據(jù)選擇
prim算法 上
循環(huán)單向鏈表
基數(shù)排序
堆排序
鏈表重合
排序二叉樹的保存和加載
圖添加和刪除
排序二叉樹線索化
非遞歸排序
字符串查找 下篇
鏈表逆轉(zhuǎn)
函數(shù)堆棧顯示
遞歸和堆棧
二叉樹深度遍歷
線性隊(duì)列
循環(huán)和遞歸
快速排序
尋找丟失的數(shù)
A*算法
克魯斯卡爾算法 下
排序二叉樹
大數(shù)計(jì)算
二叉樹廣度遍歷
prim算法 下
洗牌算法
圖結(jié)構(gòu)
最大公約數(shù)、最小公倍數(shù)
圖創(chuàng)建
雙向鏈表
字符串查找 上篇
尋路
通用算法的編寫
哈夫曼樹 下
線性堆棧
八皇后
排序二叉樹刪除-1
挑選最大的n個(gè)數(shù)
字符串查找 中篇
哈夫曼樹 上
合并排序
回?cái)?shù)
選擇排序
哈希二叉樹
通用數(shù)據(jù)結(jié)構(gòu)
“數(shù)星星”
單向鏈表
排序二叉樹插入
圖的保存
排序二叉樹刪除-2
排序二叉樹刪除-3
n!中末尾零的個(gè)數(shù)統(tǒng)計(jì)

回?cái)?shù)

回?cái)?shù)的概念比較好玩,就是說有這么一個(gè)字符串str, 長度為n, 現(xiàn)在index開始從0->index/2遍歷,那么str[index] = str[n-1-index],那么這種數(shù)據(jù)就是我們通常說的回?cái)?shù)。比如說a = “a”是回?cái)?shù), a = “aba”是回?cái)?shù), a = "strarts"也是回?cái)?shù)。因?yàn)檫@道題目比較簡單,所以很多公司都喜歡用它來檢查程序員的基本編程能力。不光如此,它還能考察程序員考慮問題是否周密,是否從不同角度考慮問題。

比如說,現(xiàn)在我們要求字符串中的字符必須是小寫字母或者大寫字母,不能是其他字符,那該怎么寫?朋友們可以試試。

int isSymbolRight(const char* str, int length)  
{  
    int index;  
    char symbol;  

    for(index = 0; index < length; index++){  
        symbol = str[index];  

        if(symbol >= 'a' && symbol <= 'z' || symbol >= 'A' && symbol <= 'Z')  
            continue;  

        return 0;  
    }  

    return 1;  
}  

int isAnagramOrNot(const char* str, int length)  
{  
    int index;  

    if(NULL == str || 0 == length)  
        return 0;  

    if(!isSymbolRight(str, length))  
        return 0;  

    for(index = 0; index < (length >> 1); index ++){  
        if(str[index] != str[length -1 -index])  
            return 0;  
    }  

    return 1;  
}  

上面的方法只是傳統(tǒng)上的比較方法,如果面試的考官說用遞歸的方法怎么計(jì)算呢?朋友們可以再試一下。

int _isAnagramOrNot(const char* str, int length){  
    if(0 == length || 1 == length)  
        return 1;  

    return (str[0] == str[length -1]) ? _isAnagramOrNot(str +1, length-2) : 0;  
}  

int isAnagramOrNot(const char* str, int length)  
{  
    if(NULL == str || 0 == length)  
        return 0;  

    if(!isSymbolRight(str, length))  
        return 0;  

    return _isAnagramOrNot(str, length);  
}  

那么,我們把難度再提高一些,如果比較的數(shù)據(jù)很多,有1000萬個(gè),那么怎么利用多核編程提高數(shù)據(jù)的處理速度呢?

int _isAnagramOrNot(const char* str, int start, int end, int length)  
{  
    int index;  
    char symbol;  

    for(index = 0; index < length; index ++){  
        if(str[start + index] != str[end -1 - index])  
            return 0;  

        symbol = str[start + index];  
        if(symbol >= 'a' && symbol <= 'z' ||  
            symbol >= 'A' && symbol <= 'Z')  
            continue;  

        return 0;  
    }  

    return 1;  
}  

int isAnagramOrNot(const char* str, int length)  
{  
    int index;  
    int start[2];  
    int end[2];  
    int result[2] = {0};  

    if(NULL == str || 0 == length)  
        return 0;  

    start[0] = 0;  
    start[1] = length >> 2;  
    end[0] = length;  
    end[1] = length - (length >>2);  

#pragma omp parallel for  
    for(index = 0; index < 2; index ++)  
        result[index] = _isAnagramOrNot(str, start[index], end[index], length >> 2);  

    return (result[0] && result[1]) ? 1 : 0;  
}  

總結(jié):

(1)從上面的題目可以看出,即使很簡單的題目,也可以考察應(yīng)聘者的總和能力

(2)提高算法執(zhí)行效率的途徑很多,朋友們平時(shí)課可以多多留意、多多積累

(3)所有算法的執(zhí)行都是以正確性和健壯性為前提的,必須建立在充分測試的基礎(chǔ)之上

上一篇:鏈表逆轉(zhuǎn)下一篇:鏈表重合