1. 程式人生 > >iOS 演算法面試題(字串逆序輸出、二叉樹、歸併排序)~demo

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;

            }

else {

                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

0;

    }

二、二叉樹

/**

二叉樹的先序遍歷為FBACDEGH,中序遍歷為:ABDCEFGH,請寫出這個二叉樹的後序遍歷結果。

    ADECBHGF

先序+中序遍歷還原二叉樹:先序遍歷是:ABDEGCFH中序遍歷是:DBGEACHF

首先從先序得到第一個為A,就是二叉樹的根,回到中序,可以將其分為三部分:

左子樹的中序序列DBGE,根A,右子樹的中序序列CHF

接著將左子樹的序列回到先序可以得到B為根,這樣回到左子樹的中序再次將左子樹分割為三部分:

左子樹的左子樹D,左子樹的根B,左子樹的右子樹GE

同樣地,可以得到右子樹的根為C

類似地將右子樹分割為根

C,右子樹的右子樹HF,注意其左子樹為空

如果只有一個就是葉子不用再進行了,剛才的GEHF再次這樣運作,就可以將二叉樹還原了。

*/

三、歸併排序

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