编程之旅-Day21

目录Day21-学习内容:1.剑指Offer面试题31:栈的压入、弹出序列面试题33:二叉搜索树的后序遍历序列2.Leetcode例1:字符串表示的数字乘法例2:循转数组的搜索3.2018年校招编程题例1:画家小Q4.2017年阿里巴巴秋招笔试题例22:问答题-淘宝邮费5.阿里巴巴2017年实习生算法笔试题6.专项训练-机器学习1.剑指O...
摘要由CSDN通过智能技术生成

目录

Day21-学习内容:

1.剑指Offer

面试题31:栈的压入、弹出序列

面试题33:二叉搜索树的后序遍历序列

 2.Leetcode

例1:字符串表示的数字乘法

例2:循转数组的搜索

 3.2018年校招编程题

例1:画家小Q

4.2017年阿里巴巴秋招笔试题

例22:问答题-淘宝邮费

5.阿里巴巴2017年实习生算法笔试题

6.专项训练-机器学习


1.剑指Offer

面试题31:栈的压入、弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

思路:使用辅助栈

代码:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        bool possible=false;
        if(!pushV.empty()&&!popV.empty()){
            int lenPush=pushV.size();
            int lenPop=popV.size();
            
            stack<int> stack;
            int i,j;
            for(i=0,j=0;i<lenPop;i++){
                while(stack.empty()||stack.top()!=popV[i]){
                    if(j==lenPush){
                        break;
                    }
                    stack.push(pushV[j]);
                    ++j;
                }
                
                if(stack.top()!=popV[i]){
                    break;
                }
                stack.pop();
            }
                
            if(stack.empty()&&i==lenPop){
                possible=true;
            }
        }
        return possible;
    }
};

 

面试题33:二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路:后序遍历序列的最后一个结点是根结点,根结点之前的序列可分为两部分,第一部分是左子树序列,值都小于根结点的值,第二部分是右子树序列,值都大于根结点的值。整个过程递归实现。

代码:

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.empty()||sequence.size()==0){
            return false;
        }
        int len=sequence.size();
        vector<int> seqleft;
        vector<int> seqright;
        
        int root=sequence[len-1];
        int i=0;
        for(;i<len-1;i++){
            if(sequence[i]>root){
                break;
            }    
            seqleft.push_back(sequence[i]);
        }
        int j=i;
        for(;j<len-1;j++){
            if(sequence[j]<root){
                return false;
            }    
            seqright.push_back(sequence[j]);
        }
        
        bool left=true;
        if(!seqleft.empty()){
            left=VerifySquenceOfBST(seqleft);
        }
        bool right=true;
        if(!seqright.empty()){
            right=VerifySquenceOfBST(seqright);
        }
        
        return (left&&right);
    }
};

 

 2.Leetcode

例1:字符串表示的数字乘法

题目描述:

Given two numbers represented as strings, return multiplication of the numbers as a string. 

Note: The numbers can be arbitrarily large and are non-negative. 

 

思路:将字符串从低到高的每一位转化成数字取出来分别相乘求和。

注意:字符转化为数字 int b=num2[j]-'0';
            数字转化为字符 result[i]=carry+'0';

代码:

class Sol
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值