371兩整數之和 501 二叉搜尋樹中的眾數

2021-10-04 09:20:15 字數 1800 閱讀 9649

不使用運算子 + 和 - ​​​​​​​,計算兩整數 ​​​​​​​a 、b ​​​​​​​之和。

示例 1:

輸入: a = 1, b = 2

輸出: 3

示例 2:

輸入: a = -2, b = 3

輸出: 1

class solution 

};

給定乙個有相同值的二叉搜尋樹(bst),找出 bst 中的所有眾數(出現頻率最高的元素)。

假定 bst 有如下定義:

結點左子樹中所含結點的值小於等於當前結點的值

結點右子樹中所含結點的值大於等於當前結點的值

左子樹和右子樹都是二叉搜尋樹

提示:如果眾數超過1個,不需考慮輸出順序

高階:你可以不使用額外的空間嗎?(假設由遞迴產生的隱式呼叫棧的開銷不被計算在內)

class solution ;

unordered_mapm;

int count=0;

vectorv;

helper(root,m,count);

for(auto i=m.begin();i!=m.end();++i)

return v;

}void helper(treenode* r,unordered_map& m,int& c)

}};

vectorfindmode(treenode* root);

treenode* pre=nullptr;

int max=0,count=0;

vectorv;

helper(root,pre,max,count,v);

return v;

}void helper(treenode* root,treenode* &pre,int& max,int& count,vector& v)

else if(count==max)

v.push_back(root->val);

pre=root;

helper(root->right,pre,max,count,v);

}}

morris中序遍歷優化,時間複雜度o(n),空間複雜度o(1)

class solution 

}//處理start

if(pre&&pre->val==cur->val)

++count;

else

count=1;

if(count>max)

else if(count==max)

v.push_back(cur->val);

//處理end

pre=cur;

cur=cur->right;

}return v;

}

morris前中序遍歷**對比如下,直接記憶背誦,方便使用

void inorder(treenode* root)

}operate(cur),pre=cur;//如果需要用到前驅節點則需定義pre,否則不用

cur=cur->right;

}}void preorder(treenode* root)

}else

operate(cur),pre=cur;//如果需要用到前驅節點則需定義pre,否則不用

cur=cur->right;

}}

371 兩整數之和

不使用運算子 class solution def getsum self,a int,b int int mask 0x100000000 整型最大值 max int 0x7fffffff min int 0x80000000 while b 0 計算進製 carry a b 1 取餘範圍限制在 ...

371 兩整數之和

題目 不使用運算子 和 計算兩整數a b之和。示例 示例1 輸入 a 1,b 2 輸出 3 思路 位運算 可以發現,在位運算中的加法 不考慮進製1 就是異或運算的結果。但是僅僅有異或運算是不夠的,我們還需要知道,何時發生了進製,這就需要用到 運算 注意到 運算得到的進製1需要移1位來得到實際真實的進...

371 兩整數之和

1.題目 不使用運算子 和 計算兩整數 a b 之和。示例 1 輸入 a 1,b 2 輸出 3示例 2 輸入 a 2,b 3 輸出 12.分析 在不採用加法和減法的前提下計算兩整數之和,這需要使用與運算子和異或運算子,首先,利用與運算 a b,計算出 a 和 b 所有進製的位置,然後將其左移一位,這...