iOS 演算法面試題(字串逆序輸出、二叉樹、歸併排序)~demo
//聯絡人:石虎
QQ: 1224614774暱稱:嗡嘛呢叭咪哄
一、字串逆序輸出
1、實現一個字串“how are you”的逆序輸出(程式語言不限)。如給定字串為“hello world”,輸出結果應當為“world hello”。
[cpp] view plain copy
int spliterFunc(char *p) {
char c[100][100];
int i =0;
int j =0;
while (*p !='\0') {
if (*p ==' ') {
i++;
j = 0;
}
c[i][j] = *p;
j++;
}
p++;
}
for (int k = i; k >=0; k--) {
printf("%s", c[k]);
if (k >0) {
printf(" ");
} else {
printf("\n");
}
} return
}
二、二叉樹
/**
二叉樹的先序遍歷為FBACDEGH,中序遍歷為:ABDCEFGH,請寫出這個二叉樹的後序遍歷結果。
ADECBHGF
先序+中序遍歷還原二叉樹:先序遍歷是:ABDEGCFH中序遍歷是:DBGEACHF
首先從先序得到第一個為A,就是二叉樹的根,回到中序,可以將其分為三部分:
左子樹的中序序列DBGE,根A,右子樹的中序序列CHF
接著將左子樹的序列回到先序可以得到B為根,這樣回到左子樹的中序再次將左子樹分割為三部分:
左子樹的左子樹D,左子樹的根B,左子樹的右子樹GE
同樣地,可以得到右子樹的根為C
類似地將右子樹分割為根
如果只有一個就是葉子不用再進行了,剛才的GE和HF再次這樣運作,就可以將二叉樹還原了。
*/
三、歸併排序
void merge(int sourceArr[],int tempArr[], int startIndex,int midIndex, int endIndex) {
int i = startIndex;
int j = midIndex +1;
int k = startIndex;
while (i != midIndex +1 && j != endIndex + 1) {
if (sourceArr[i] >= sourceArr[j]) {
tempArr[k++] = sourceArr[j++];
} else {
tempArr[k++] = sourceArr[i++];
}
}
while (i != midIndex +1) {
tempArr[k++] = sourceArr[i++];
}
while (j != endIndex +1) {
tempArr[k++] = sourceArr[j++];
}
for (i = startIndex; i <= endIndex; i++) {
sourceArr[i] = tempArr[i];
}
}
void sort(int souceArr[],int tempArr[], int startIndex,int endIndex) {
int midIndex;
if (startIndex < endIndex) {
midIndex = (startIndex + endIndex) / 2;
sort(souceArr, tempArr, startIndex, midIndex);
sort(souceArr, tempArr, midIndex +1, endIndex);
merge(souceArr, tempArr, startIndex, midIndex, endIndex);
}
}
int main(int argc,constchar * argv[]) {
int numArr[10] = {86,37, 56,29, 92,73, 15,63, 30,8};
int tempArr[10];
sort(numArr, tempArr, 0,9);
for (int i =0; i < 10; i++) {
printf("%d, ", numArr[i]);
}
printf("\n");
return0;
}
謝謝!!!相關推薦
iOS 演算法面試題(字串逆序輸出、二叉樹、歸併排序)~demo
//聯絡人:石虎 QQ: 1224614774暱稱:嗡嘛呢叭咪哄 一、字串逆序輸出 1、實現一個字串“how are you”的逆序輸出(程式語言不限)。如給定字串為“hello wo
面試題55(一):二叉樹的深度
一、題目 輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 二、關鍵 三、解釋 四、程式碼 #include <cstdio> #include "..\Utilities\
資料結構和演算法精講版(陣列、棧、佇列、連結串列、遞迴、排序、二叉樹、紅黑樹、堆、雜湊表)Java版
查詢和排序是最基礎也是最重要的兩類演算法,熟練地掌握這兩類演算法,並能對這些演算法的效能進行分析很重要,這兩類演算法中主要包括二分查詢、快速排序、歸併排序等等。我們先來了解查詢演算法! 順序查詢: 順序查詢又稱線性查詢。它的過程為:從查詢表的最後一個元素開始逐個與給定關鍵字比較,若某個記錄的關鍵字和給定值比較
連結串列、二叉樹、演算法
連結串列:是一種物理儲存單元上非連續,非順序的儲存結構。連結串列由一系列的結點組成,結點可以在執行時動態生成。結點由兩部 分組成,一部分是儲存資料元素的資料域,另一部分是儲存下一個結點地址的指標域。 二叉樹:二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作“左
樹的學習——(遞迴構建二叉樹、遞迴非遞迴前序中序後序遍歷二叉樹、根據前序序列、中序序列構建二叉樹)
前言 最近兩個星期一直都在斷斷續續的學習二叉樹的資料結構,昨晚突然有點融匯貫通的感覺,這裡記錄一下吧 題目要求 給定前序序列,abc##de#g##f###,構建二叉樹,並且用遞迴和非遞迴兩種方法去做前序,中序和後序遍歷 二叉樹的資料結構 #define STACKSI
iOS 演算法面試題(氣泡排序、選擇排序、連結串列逆序)~demo
//聯絡人:石虎 QQ: 1224614774暱稱:嗡嘛呢叭咪哄 一、氣泡排序 //1、對以下一組資料進行降序排序(氣泡排序)。“24,17,85,13,9,54,76,45,5,63” i
寫一個遞迴演算法來實現字串逆序儲存,要求不另設串儲存空間。
遞迴演算法中需要使用一個靜態變數儲存陣列下標 #include <iostream> using namespace std; void invert(char A[]) { char ch; static int i=0;//利用靜態變數儲存陣列下標 ci
Java字串逆序輸出
public class re { //這個方法只是看效果,無返回 public void reverse(String s){ char[] arr=s.toCharArray();//字串轉為字元陣列 for
NYOJ266 字串逆序輸出
字串逆序輸出 時間限制:3000 ms | 記憶體限制:65535 KB 難度:0 描述給定一行字元,逆序輸出此行(空格.數字不輸出) 輸入第一行是一個整數N(N<10)表示
基於陣列的棧實現--控制檯輸入字串逆序輸出。
要求:提示輸入一個字串,回車後螢幕顯示字串順序倒置後的結果。 思想:用棧進行字串逆序。首先字母從輸入的字串中開一個一個的提取出來,並壓入棧中,接著它們依次彈出棧,並顯示出來,因為棧後進先出的特性,字串的順序就顛倒過來了。 StackX類 public class StackX {
關於python的字串逆序輸出
剛剛學習python,在http://www.pythontip.com上進行練習。 遇到題目如下: 給你一個字串 a, 如a=‘12345’,對a進行逆序輸出a。 (1)一開始想著簡單的逆序輸出就好了,所以嘗試了以下的寫法: <pre name="code" c
字串逆序輸出,要求呼叫函式實現
比較簡單,要求呼叫函式實現 #include<stdio.h> #include<string.h> void inv(char s1[],char s2[]) {
劍指Offer面試題5——倒序輸出一個連結串列
問題:已知一個連結串列,倒序輸出它; 其實原題是一個c++的應用題,可以用指標來解決,在java中Arraylist有get()方法也是可以一步到位的,作者給出了一個解決思路用棧來實現,這裡就依照這個思路來簡單寫一下,棧和ArrayList是自己寫的java實現
C語言簡單遞迴實現字串逆序輸出
題目內容的 “注意” 已經側面規定了要用遞迴來實現: 輸入是一個可能含有空格的串說明要用gets來讀入字串,如果利用scanf的話是無法讀入一段含有空格的串。 下面先上一般方法: #include "stdio.h" #include "string.h" char *
面試題6:根據前序和中序序列構建二叉樹(Leetcode-106)
題目:輸入二叉樹的前序遍歷和中序遍歷序列,重構其二叉樹,假設輸入的數字都是不重複的。 例如前序序列是 {1,2,4,7,3,5,6,8},中序序列是{4,7,2,1,5,3,8,6}。 分析如下圖所示: 演算法步驟: 1. 前序序列的第一個元素即根節
已知二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列
iostream code tor data- span main ast avi dsm 題目描寫敘述 輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。 輸入 第一行輸入二叉樹的先序遍歷序列; 第二行輸入二叉樹的中序遍歷序列。 輸出 輸出該二叉樹的
資料結構實驗-C語言-二叉樹的建立,前、中、後序遍歷的遞迴演算法和非遞迴演算法,求葉子結點數目,求二叉樹深度,判斷二叉樹是否相似,求二叉樹左右子樹互換,二叉樹層序遍歷的演算法,判斷二叉樹是否是完全二叉樹
1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後
求逆序對個數的三種方法(歸併排序,樹狀陣列,權值線段樹)
求逆序對個數的三種方法 逆序對: 對於一個序列 a1a_1a1,a2a_2a2,a3a_3a3…ana_nan,如果存在aia_iai>aja_jaj且i<j,則aia_iai和aja_jaj為一個逆序對。 這裡將介紹3種求逆序對對數
資料結構-----後序遍歷二叉樹非遞迴演算法(利用堆疊實現)
一、非遞迴後序遍歷演算法思想 後序遍歷的非遞迴演算法中節點的進棧次數是兩個,即每個節點都要進棧兩次,第二次退棧的時候才訪問節點。 第一次進棧時,在遍歷左子樹的過程中將"根"節點進棧,待左子樹訪問完後,回溯的節點退棧,即退出這個"根"節點,但不能立即訪問,只能藉助於這個"根"
[C/C++] 先序建立二叉樹| 先序、中序、後序遍歷二叉樹| 求二叉樹深度、節點數、葉節點數 演算法實現
/* * BinTree.h */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #defi