leetcode-106-从中序和后序遍历构建二叉树 题型:树、递归 难度:中等 题目:根据一棵树的中序遍历与后序遍历构造二叉树。 注意:你可以假设树中没有重复的元素。 代码:
class Solution {
public :
TreeNode * CreateTre ( vector< int > & inorder, vector< int > & postorder, int l1, int r1, int l2, int r2) {
if ( l1> r1 || l2> r2) return nullptr ;
int nRoot = postorder[ r2] ;
TreeNode * root = new TreeNode ( 0 ) ;
root- > val = nRoot;
int n;
for ( int i= l1; i<= r1; i++ )
{
if ( inorder[ i] == nRoot)
{
n = i;
break ;
}
}
int leftsize = n- l1;
int rightsize = r1- n;
root- > left = CreateTre ( inorder, postorder, l1, n- 1 , l2, l2+ leftsize- 1 ) ;
root- > right = CreateTre ( inorder, postorder, n+ 1 , r1, l2+ leftsize, r2- 1 ) ;
return root;
}
TreeNode* buildTree ( vector< int > & inorder, vector< int > & postorder) {
int size1 = inorder. size ( ) ;
int size2 = postorder. size ( ) ;
if ( size1== 0 || size1!= size2) return nullptr ;
TreeNode * root = CreateTre ( inorder, postorder, 0 , size1- 1 , 0 , size2- 1 ) ;
return root;
}
} ;
leetcode-7-整数反转 难度:简单 题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 代码:
class Solution {
public :
int reverse ( int x) {
if ( x == 0 ) return x;
int res = 0 ;
while ( x != 0 )
{
int num = x% 10 ;
if ( res> INT_MAX/ 10 || ( res== INT_MAX/ 10 && num> 7 ) )
{
res = 0 ;
break ;
}
if ( res< INT_MIN/ 10 || ( res== INT_MIN/ 10 && num< - 8 ) )
{
res = 0 ;
break ;
}
res * = 10 ;
res = res+ num;
x / = 10 ;
}
return res;
}
} ;
leetcode-28-实现strStr() 题型:字符串、双指针
class Solution {
public :
int strStr ( string haystack, string needle) {
int n1 = haystack. size ( ) ;
int n2 = needle. size ( ) ;
if ( n2== 0 ) return 0 ;
if ( n1== 0 ) return - 1 ;
int l1 = 0 , l2 = 0 ;
int lastbegin = 0 ;
while ( l1< n1 && l2< n2)
{
if ( haystack[ l1] == needle[ l2] )
{
l1++ ;
l2++ ;
}
else
{
l2 = 0 ;
lastbegin++ ;
l1 = lastbegin;
}
}
if ( l2 == n2) return lastbegin;
return - 1 ;
}
} ;
leetcode-217-存在重复元素 题型:哈希表 难度:简单 题目:给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 代码的:
class Solution {
public :
bool containsDuplicate ( vector< int > & nums) {
unordered_map< int , int > mp;
for ( auto i: nums)
{
if ( mp. find ( i) == mp. end ( ) )
{
pair< int , int > pr ( i, 1 ) ;
mp. insert ( pr) ;
}
else
{
return true ;
}
}
return false ;
}
} ;