zoukankan      html  css  js  c++  java
  • 剑指offer相关问题

    1. 变态跳台阶

         Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)

               =Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)+Fib(n-1)
    而Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)
    两式相减得:Fib(n) - Fib(n-1) = Fib(n-1) =====》 Fib(n) = 2*Fib(n-1)

     

    ref

    2. 二叉搜索树的后序遍历序列

     1 bool VerifySquenceOfBST(vector<int> sequence) {
     2     if (sequence.empty()) {
     3         return false;
     4     }
     5     return verifyBST(sequence, 0, sequence.size() - 1);
     6 }
     7 
     8 bool verifyBST(vector<int>& sequence, int start, int end) {
     9     if (start >= end) {
    10         return true;
    11     }
    12     int rootVal = sequence[end];
    13     int i;
    14     for (i = start; i < end; i++) {
    15         if (sequence[i] > rootVal) {
    16             break;
    17         }
    18     }
    19     int index = i;
    20     for (; i < end; i++) {
    21         if (sequence[i] < rootVal) {    
    22             return false;
    23         }
    24     }
    25     return verifyBST(sequence, start, index - 1) && verifyBST(sequence, index, end - 1);
    26 }
    View Code

    思想就是:分治地去处理,每次处理一个范围,范围中的最末点即为root。从前向后遍历,找到第一个大于root的点作为分界点index,只要index到end没有小于root的了就说明是BST。

    3. 二叉树中和为某一值的路径

    该题即为leetcode的Path Sum II.

    可以用后序遍历来做。第一次访问该节点时将其加入累积和及path中,第3次访问该节点时从累计和和path中减去,同时判断如果该节点是叶子节点的话是否符合累积和=target,等于的话就将其加入result。

  • 相关阅读:
    jchdl
    jchdl
    jchdl
    jchdl
    jchdl
    jchdl
    jchdl
    UVa 437 (变形的LIS) The Tower of Babylon
    UVa 1025 (动态规划) A Spy in the Metro
    UVa 10129 (并查集 + 欧拉路径) Play on Words
  • 原文地址:https://www.cnblogs.com/forcheryl/p/4739355.html
Copyright © 2011-2022 走看看