不使用運算子 + 和 - ,計算兩整數 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 所有進製的位置,然後將其左移一位,這...