2020 10 30每天一刷

2021-10-10 02:44:51 字數 3947 閱讀 8834

給你乙個公升序排列的整數陣列 nums ,和乙個整數 target 。

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。(例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

請你在陣列中搜尋 target ,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

示例 1:

輸入:nums = [4,5,6,7,0,1,2], target = 0

輸出:4

示例 2:

輸入:nums = [4,5,6,7,0,1,2], target = 3

輸出:-1

示例 3:

輸入:nums = [1], target = 0

輸出:-1

1 <= nums.length <= 5000

-10^4 <= nums[i] <= 10^4

nums 中的每個值都 獨一無二

nums 肯定會在某個點上旋轉

-10^4 <= target <= 10^4

思路:target == nums[mid] 就返回mid;通過nums[begin]和nums[mid]來區分那一部分是有序的,那一部分不是有序的,從而縮小搜素的範圍。

class

solution

if(n ==1)

int begin =0;

int end = nums.

size()

-1;while

(begin <= end)

if(nums[begin]

<= nums[mid]

)else

begin = mid +1;

}else

else}}

return-1

;}};

左子樹不為空,怎左子樹上的所有節點的值均小於或者等於它的根節點的值;

若右子樹不為空,則右子樹上所有節點的值均大於或者等於它的根節點的值;

左右子樹也分別為二叉排序樹。

等於的情況只能出現在左子樹或者右子樹中的某一側。

二叉查詢樹的中序遍歷是從小到大的,故又名二叉排序樹。

二叉排序樹的建立

#include

"util.h"

using

namespace std;

struct treenode};

//在乙個bst樹中插入乙個新的節點

void

bst_insert

(treenode* node,treenode* insert_node)

else

}else

else}}

//前序列印bst樹

void

preorder_print

(treenode* node,

int layer)

for(

int i =

0; i < layer;

++i)

printf

("%d\n"

,node-

>val)

;preorder_print

(node-

>left,layer+1)

;preorder_print

(node-

>right,layer+1)

;}//查詢某一節點是否在bst二叉樹中

bool

bst_search

(treenode* node,

int value)

if(value < node-

>val)

return

false;}

else

else}}

intmain()

;for

(int i =

0; i <5;

++i)

for(

int i =

0; i < node_vec.

size()

;++i)

preorder_print

(&root,0)

;return0;

}

序列化是將資料結構或物件轉換為一系列位的過程,以便它可以儲存在檔案或記憶體緩衝區中,或通過網路連線鏈路傳輸,以便稍後在同乙個或另乙個計算機環境中重建。

設計乙個演算法來序列化和反序列化 二叉搜尋樹 。 對序列化/反序列化演算法的工作方式沒有限制。 您只需確保二叉搜尋樹可以序列化為字串,並且可以將該字串反序列化為最初的二叉搜尋樹。

編碼的字串應盡可能緊湊。

示例 1:

輸入:root = [2,1,3]

輸出:[2,1,3]

示例 2:

輸入:root =

輸出:

樹中節點數範圍是 [0, 104]

0 <= node.val <= 104

題目資料 保證 輸入的樹是一棵二叉搜尋樹。

注意:不要使用類成員/全域性/靜態變數來儲存狀態。 你的序列化和反序列化演算法應該是無狀態的。

思路:**:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

codec

for(

int i = tmp.

length()

-1;i >=0;

--i)

str_val +

='#';}

void

bst_preorder

(treenode* node, string& data)

string str_val;

change_int_to_string

(node-

>val,str_val)

; data +

= str_val;

bst_preorder

(node-

>left, data)

;bst_preorder

(node-

>right, data);}

void

bst_insert

(treenode* node,treenode* insert_node)

else

}else

else}}

public

:// encodes a tree to a single string.

string serialize

(treenode* root)

// decodes your encoded data to tree.

treenode*

deserialize

(string data)

vector> node_vec;

int val =0;

for(

int i =

0;ilength()

;++i)

else

}for

(int i =

1; i < node_vec.

size()

;++i)

return node_vec[0]

;}};

// your codec object will be instantiated and called as such:

// codec* ser = new codec();

// codec* deser = new codec();

// string tree = ser->serialize(root);

// treenode* ans = deser->deserialize(tree);

// return ans;

每天一刷20200602

問題 寫出乙個程式,接受乙個正浮點數值,輸出該數值的近似整數值。如果小數點後數值大於等於5,向上取整 小於5,則向下取整。思路 其實就是實現乙個正浮點數的四捨五入,可以呼叫math.h中的round 函式直接完成,有點討巧。include include using namespace std in...

每天一刷20200603

問題 編寫乙個函式,計算字串中含有的不同字元的個數。字元在acsii碼範圍內 0 127 換行表示結束符,不算在字元裡。不在範圍內的不作統計。注意是不同的字元 思路 跟之前做過的乙個題相似,那個題是字串去重,稍作修改就行了。include include using namespace std in...

每天一刷20200605

昨天返校,沒有做題。問題 功能 等差數列 2,5,8,11,14 輸入 正整數n 0 輸出 求等差數列前n項和 返回 轉換成功返回 0 非法輸入與異常返回 1 思路 這個題其實就是簡單的等差數列求和,設定好初始項,然後控制好迴圈次數即可。ps 在處理輸入的時候要注意用while 來讀取輸入,不然提交...