zoukankan      html  css  js  c++  java
  • Careercup 论坛上较有意思的题目整理

    # 数据结构类

    ### 线段树 segment tree

    http://www.careercup.com/question?id=5165570324430848

    找区间内的value的个数

    二维线段树

    http://www.careercup.com/question?id=5746897784406016

    http://www.careercup.com/question?id=15443800

    关于线段树的构造,参考《手写代码必备手册》(https://github.com/soulmachine/acm-cheat-sheet), Page 52

    ### Trie

    给定N个字串,作为一个库,N很大而且不断有新的字串加入。这是给一个字串s,判断s是否是库中某一个字符串的 substring

    用KMP把s和库里的字符串挨个判断下当然可以,但是有点慢。这里也是将库中的字符串构建成 Trie,新加入的字串可以很快地并入Trie中。判断s是否是某一个字串的substring时,在Trie中进行KMP运算,具体过程有点复杂,还没想全。

    Leetcode上最近出了几道Trie的题

    ### Tree

    http://www.careercup.com/question?id=6040159610994688

    变体:寻找二叉树内距离指定结点最远的结点。

    - BST

    http://www.careercup.com/question?id=19016700

    不构建BST的情况下判断两个序列生成的BST是否 Identical

    对于序列S和序列T。若要相等,首先S[0]和T[0]必须相等。接着,从S[1]开始,如果比S[0]小,就找到第一个比S[0]大的S[i]为止。这样,我们知道S[1~i-1] 构建了S[0]的左子树,S[i~n-1]构建S[0]的右子树。 如果S[1] > S[0],就找到第一个比S[0]小的S[j] 为止。
    
    对T也一样。也可以划分成左右子数部分。然后递归比较两个左子树部分,和两个右子树部分。
    平均情况O(nlogn),最坏情况O(n^2)
    思路

    http://www.careercup.com/question?id=62565

    approach类似 https://leetcode.com/problems/binary-tree-maximum-path-sum/

    就是edge case要稍微考虑下

    http://www.careercup.com/question?id=16126663

    double sum(Node root){
     if(root == null){
      return 0;
     } return root.value + sum(root.left) + sum(root.right);
    }
    
    上面的代码返回啥?
    返回所有结点的和
    
    若return改成 -(root.value + sum(root.left) + sum(root.right)); 返回啥?
    返回奇数层的总和减去偶数层的总和 的差值。(假设root 在1层)
    
     -root.value + sum(root.left) + sum(root.right)
    则变成偶数层的总和减去奇数层的总和 的差值。 
    
    可以看出两种情况下,root.value前总是负号。
    分析

    - Suffix Tree

    http://www.careercup.com/question?id=16381662

    F家,利用suffix tree寻找N个字符串的最长公共子串

    ### stack

    http://www.careercup.com/question?id=5978736570662912

    检测duplicate parethese

    #算法类

    ###自底向上

    http://www.careercup.com/question?id=22191662

    玻璃杯塔倒水问题。求给定X升水,全倒下去后,第[i, j] 杯里的水量。

    http://www.careercup.com/question?id=23869663

    DP, 先找只有一个字母的比给定string 小的 sstring个数A1,再找只有两个字母的比给定string 小的 sstring个数A2,三个字母 A3,四个 A4……

    若给定的是"bcd", A2 = (A1-1)*25 + 2

    http://www.careercup.com/question?id=6306164115505152

    注意是求最长总时间,不是求最多work 数 

    ### string

    http://www.careercup.com/question?id=5177378863054848

    get total amount of palindromic substring in a stirng.

    DP, 参考leetcode https://leetcode.com/problems/palindrome-partitioning-ii/

    http://www.careercup.com/question?id=5092414932910080

    其实就是string window,不过vote最高的那个答案代码组织的很清楚,值得借鉴。

    http://www.careercup.com/question?id=20235671

    ### 倒腾数组类

    http://www.careercup.com/question?id=5129701993480192

    从低到高排好序的age,在小于O(N) 时间内统计出每个年龄的人数。

    http://www.careercup.com/question?id=5652354158297088

    求 A+B = C+D的组合

    http://www.careercup.com/question?id=21263687

    总长为n的数组内存储着值在[1-n] 的Interger (无序,可能有重复),统计每个数出现的次数。

    http://www.careercup.com/question?id=16813665

    给定数目是3,也许把中间那个做为基准考虑是个思路。
    类似的还有求string中最大的palindromic substring
    hint

    http://www.careercup.com/question?id=5436643691462656

    有点像智力题而不是算法题。 

    http://www.careercup.com/question?id=6261752413028352

    ### 数学题

    http://www.careercup.com/question?id=5173527795728384

    static public int rand7() {
    
        // This will gives us a result of 
        // 0 to 7 (binary 000 to 111)
        // which should be evenly distributed.
        // reject 7 so we have 0 to 6
        int result = 7;
        while (result == 7) {
            result = randBit() * 4 + randBit() * 2 + randBit();
        }
        
        return result;
    }
    
    // gets a random 0 or 1
    static public int randBit() {
    
        // Eliminate zero so we have an equal number 
        // of even/odd values (1, 2, 3, or 4)
        int result = 0;
        while (result == 0) {
            result = rand5();
        }
    
        return result % 2;
    }
    general 解法

    http://www.careercup.com/question?id=20355664

    想到亦或,但是最优解法更加牛。智力题+1..

    # System design 

    http://www.careercup.com/question?id=6432883367477248

  • 相关阅读:
    List of XML and HTML character entity references
    Windows 如何查看端口占用情况?
    input placeholder文字垂直居中(Mobile & PC)
    使用CSS3改变选中元素背景色
    登录远程SQL服务器
    写了一个简洁的删除重复行的case
    自动驾驶中的计算机视觉
    ImageNet图像分类大赛
    在IDEA中使用MyBatis Generator逆向工程生成代码
    利用浏览器LocalStorage缓存图片,视频文件
  • 原文地址:https://www.cnblogs.com/felixfang/p/4443657.html
Copyright © 2011-2022 走看看