面試中經常出現的演算法

2021-06-10 06:06:22 字數 2747 閱讀 2006

面試中經常出現的演算法

面試中經常出現的演算法 (2010-09-21 09:01)

分類:

面試題二分查詢的**.

int bfind(int* a,int len,int val)

else if(a[m] < val)

else

return m;

}return -1;   //沒有找到

}寫出在母串中查詢子串出現次數的**.

int count1(char* str,char* s)

if(*s2 == '\0')

count++;

str++;

}return count;

}查詢第乙個匹配子串位置,如果返回的是s1長度len1表示沒有找到

size_t find(char* s1,char* s2)

if(j==len)

break;

}return i    }

寫出快速排序或者某種排序演算法**

快速排序:

int partition(int* a,int l,int r)

swap(a[i],a[r]);

return i;

}void qsort(int* a,int l,int r)

氣泡排序:

void buble(int *a,int n)}}

}插入排序:

void insertsort(int* a,int n)

a[i+1] = key;}}

出現次數相當頻繁

實現strcmp函式

int strcmp11(char* l,char* r)

實現字串翻轉

void reserve(char* str)

}將乙個單鏈表逆序

struct list_node

int data;

list_node* next;

};void reserve(list_node* phead)

}測試程式:

list lt;

lt.phead = new list_node(0,0);

lt.phead->next = new list_node(1,0);

lt.phead->next->next = new list_node(2,0);

lt.phead->next->next->next = new list_node(3,0);

lt.reserve();

list_node * p = lt.phead;

while(p)

迴圈鍊錶的節點對換和刪除。

//雙向迴圈

list_node* earse(list_node* node)

//單項迴圈

list_node* earse(list_node* node)

將乙個數字字串轉換為數字."1234" -->1234

int atoii(char* s)

return num;

}出現次數相當頻繁

.實現任意長度的整數相加或者相乘功能。

void bigadd(char* num,char* str,int len)}}

.寫函式完成記憶體的拷貝

void* memcpy( void *dst, const void *src, unsigned int len )

while ( len-- )

} else if ( dst < src )

while ( len-- )

}return dst;

}出現次數相當頻繁

編寫類string的建構函式、析構函式和賦值函式,已知類string的原型為:

class string

;解答:

//普通建構函式

string::string(const char *str)

else

}// string的析構函式

string::~string(void)

//拷貝建構函式

string::string(const string &other)    // 得分點:輸入引數為const型

//賦值函式

string & string::operate =(const string &other) // 得分點:輸入引數為const型

剖析:能夠準確無誤地編寫出string類的建構函式、拷貝建構函式、賦值函式和析構函式的面試者至少已經具備了c++基本功的60%以上!

在這個類中包括了指標類成員變數m_data,當類中包括指標類成員變數時,一定要過載其拷貝建構函式、賦值函式和析構函式,這既是對c++程式設計師的基本要求,也是《effective c++》中特別強調的條款。

實現strcpy

char * strcpy( char *strdest, const char *strsrc )

編寫乙個函式,作用是把乙個char組成的字串迴圈右移n個。比如原來是「abcdefghi」如果n=2,移位後應該是「hiabcdefgh」

函式頭是這樣的:

//pstr是指向以'\0'結尾的字串的指標

//steps是要求移動的n

void loopmove ( char * pstr, int steps )

解答:正確解答1:

void loopmove ( char *pstr, int steps )

正確解答2:

void loopmove ( char *pstr, int steps )

面試中經常出現的演算法1(整理)

二分查詢的 int bfind int a,int len,int val else if a m val else return m return 1 沒有找到 寫出在母串中查詢子串出現次數的 int count1 char str,char s if s2 0 count str return ...

面試中經常出現的演算法2(整理)

出現次數相當頻繁 實現strcmp函式 int strcmps char l,char r 實現字串翻轉 不使用strlen函式 char strrev char string return start 將乙個單鏈表逆序 void reserve node phead 將乙個數字字串轉換為數字.12...

面試中經常出現的redis問題

總之一句話,用redis就是為了防止高併發訪問量大的情況下,你的伺服器gg了,就像是100w個賬號搶周杰倫演唱會2w個票時,大麥崩了!錢都花不出去!啥也不是!出現這個問題的原因就是多人同時訪問資料庫,造成資料庫的崩潰。這時候就出現了redis 不是黃牛的意思!redis作為乙個實現資料的快取,主要作...