2020-09-25刷题

  1. leetcode-106-从中序和后序遍历构建二叉树
    题型:树、递归
    难度:中等
    题目:根据一棵树的中序遍历与后序遍历构造二叉树。
    注意:你可以假设树中没有重复的元素。
    代码:
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
 //边界越界问题比较头疼...
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;
    }
};
  1. 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;
    }
};
  1. 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;
    }
};
  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;
            }
        }
        //if(mp.size() == nums.size()) return false;
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值