1.二維陣列中的查詢
題目:在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
**:
bool find(int target, vector> array) else
}return false;
}
2.替換空格
題目:
void replacespace(char *str,int length)
if (len == 0) return;
int new_length = len2 + 2 * len;
while (len2 >= 0 && new_length >= len2) else
}return;
}
3.從尾到頭列印鍊錶
題目:輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。
思路:用乙個臨時棧。
vectorprintlistfromtailtohead(listnode* head)
int temp;
while (!node.empty())
return linklist;
}
4.重建二叉樹
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
思路:先序遍歷第乙個節點一定是根節點,然後再去看中序,中序里根節點的左面的節點一定在左子樹,右邊一定在右子樹。然後進行遞迴。
treenode* reconstructbinarytree(vectorpre,vectorvin)
vectorleft_pre, right_pre, left_vin, right_vin;
treenode *node = new treenode(pre[0]);
int length = 0;
while (pre[0] != vin[length] && length < pre.size())
for (int i = 0; i < length; i++)
for (int i = length + 1; i < pre.size(); i++)
node->left = reconstructbinarytree(left_pre, left_vin);
node->right = reconstructbinarytree(right_pre, right_vin);
return node;
}
5.用兩個棧實現佇列
題目:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
class solution
int pop()
}int val = stack2.top();
stack2.pop();
return val;
}private:
stackstack1;
stackstack2;
};
6.旋轉陣列的最小數字
題目:把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。
int minnumberinrotatearray(vectorrotatearray)
for (int i = 0; i < rotatearray.size() - 1; i++)
return rotatearray[0];
}
7.斐波那契數列
題目:大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。
n<=39
int fibonacci(int n) else if (n == 1)
int fb1 = 0, fb2 = 1, fbn = 0;
for (int i = 2; i <= n; i++)
return fbn;
}
8.跳台階
題目:乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
思路:用遞迴的思想 f(n) = f(n - 1) + f(n - 2);
int jumpfloor(int number) else if (number == 1) else if (number == 2) else
}
9.**跳台階
題目:乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
int jumpfloorii(int number)
int count = 0;
for (int i = 1; i <= number; i++)
return count;
}
10.矩形覆蓋
題目:我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?
思路:遞迴或者斐波那契
//遞迴
int rectcover(int number) else if (number == 1) else if (number == 2) else
}//斐波那契
int rectcover(int number) else if (number == 1) else if (number == 2)
int fn, f1 = 1, f2 = 2;
for (int i = 3; i <= number; i++)
return fn;
}
11.二進位制中的個數
題目:輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
關鍵字:位運算
int numberof1(int n)
flag = flag << 1;
}return count;
}//o(1)
int numberof1(int n)
12.數值的整數次方
題目:給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
double power(double base, int exponent)
return ans;
}
13.調整陣列的順序使奇數字於偶數的前面
題目:輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
void reorderarray(vector&array) }}
}
現在只做了這幾道題,隨著之後的學習,以後還會更新~ 劍指Offer習題3 4
思路 一 陣列查詢 折半 二分 查詢 int binsearch int arr,int len,int key else if arr mid key else return mid bool search int arr 4 int key len int newlen len count 2 ...
劍指offer習題集
一 二維陣列的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 從左下角元素往上查詢,右邊元素是比這個元素大,上邊是的元素比這個元素小。於是,tar...
劍指offer習題集
1.過載賦值運算子函式 具體見 普通做法 cmystring cmystring operator const cmystring str 更加安全的做法,普通做法在new記憶體不足情況下,已經將原值delete cmystring cmystring operator const cmystrin...