給你乙個公升序排列的整數陣列 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 來讀取輸入,不然提交...