几个笔试题目总结

1、阿里某个笔试题,两个字符串text,query,找到text中包含的最长的query的字串:

public static String subStr(String text, String query) {
        if (text != null && query != null) {
            int length = query.length();
            for (int i = 0; i < length; i++) {
                for (int j = 0; j <= i; j++) {
                    String sub = query.substring(j, length - i + j);
                    if (text.contains(sub)) {
                        return sub;
                    }
                }
            }
        }
        return null;
    }

2、阿里某笔试题:找到一个二叉树中最大最小值对应节点的差值的绝对值,也就是节点所在层的差值,并不是本身数值的差值:

package mystudy;

import java.util.LinkedList;
import java.util.Queue;

public class Tree {

    private TreeNode root;

    public Tree() {

    };

    public Tree(TreeNode root) {
        this.root = root;
    }

    public void initTree() {
        root = new TreeNode(8);
        root.setLeft(new TreeNode(5));
        root.getLeft().setLeft(new TreeNode(7));
        root.getLeft().setRight(new TreeNode(4));
        root.setRight(new TreeNode(9));
        root.getRight().setRight(new TreeNode(6));
        root.getRight().setLeft(new TreeNode(10));
    }

    public int minMaxSpan() {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        TreeNode node;
        if (root != null) {
            node = root;
            int visitedNum = 0, addedNum = 1, levelNum = 1, min, max, depth = 0, minLevel = 0, maxLevel = 0;
            min = max = root.getValue();
            queue.offer(node);
            while (!queue.isEmpty()) {
                TreeNode mNode = queue.poll();
                if (min > mNode.getValue()) {
                    min = mNode.getValue();
                    minLevel = depth;
                } else if (max < mNode.getValue()) {
                    max = mNode.getValue();
                    maxLevel = depth;
                }
                visitedNum++;
                if (mNode.getLeft() != null) {
                    queue.offer(mNode.getLeft());
                    addedNum++;
                }
                if (mNode.getRight() != null) {
                    queue.offer(mNode.getRight());
                    addedNum++;
                }
                if (visitedNum == levelNum) {
                    depth++;
                    levelNum = addedNum;
                }
            }
            System.out.println("min:" + min + "max:" + max + "minLevel:"
                    + minLevel + "maxLevel:" + maxLevel);
            return Math.abs(minLevel - maxLevel);
        }
        return -1;
    }

    public class TreeNode {
        private TreeNode left;
        private TreeNode right;
        private int value;

        public TreeNode(TreeNode left, TreeNode right, int value) {
            this.left = left;
            this.right = right;
            this.value = value;
        }

        public TreeNode(int value) {
            this(null, null, value);
        }

        public TreeNode getLeft() {
            return left;
        }

        public void setLeft(TreeNode left) {
            this.left = left;
        }

        public TreeNode getRight() {
            return right;
        }

        public void setRight(TreeNode right) {
            this.right = right;
        }

        public int getValue() {
            return value;
        }

        public void setValue(int value) {
            this.value = value;
        }

    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Tree tree = new Tree();
        tree.initTree();
        System.out.println(tree.minMaxSpan());
    }

}

以后不断补充。。。

时间: 2024-11-03 21:44:51

几个笔试题目总结的相关文章

算法学习 并查集(笔试题目:找同伙)

题目背景太长,记得不清楚,暂参考<啊哈算法>一书,根据笔试题目大意改编如下: 警察正要捉获某地区的犯罪团伙,由于强盗人数过大,想查清楚有几个团伙非常困难. 根据上级指示,需要首先尽快抓获强盗A所在的团伙,这需要掌握 1 所在团伙的人数.先有资料如下: 强盗1 和 强盗2 是同伙 强盗3 和 强盗4 是同伙 强盗2 和 强盗5 是同伙 强盗3 和 强盗2 是同伙 注意,强盗的同伙的同伙也是同伙,问  强盗1 的同伙(不包括1自己)有多少人? 该题形式化表示如下: 每个测试实例首先包括2个整数:N

2017 校招网上笔试题目

2017 校招网上笔试题目 做了一下某大厂的笔试的题目 1. 一个表, visit(cookie_id, area1, area2, date) 给出各种查询策略中, 哪一种最好,每一条SQL语句大同小异, 几乎看不出区别, 还有6,7个选项,同时字数很长.一般的SQL语句好像有根据查询的嵌套顺序来比较差异的,但是这道题反而没有.反正蒙了一个.没有数字可算,心里没有底,应该证明了SQL语法可能会很大地影响查询效率. 2. 给了几个条件,判断你的名次.又是球赛的问题,考查你的推理能力. 3. en

几道经典的SQL笔试题目

几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人      商品名称     数量 A            甲          2 B            乙          4 C            丙          1 A            丁          2 B            丙          5 …… (其他用户实验的记录大家可自行插入) 给出所有购入商品为两种或两种以上的购物人记录 答:select * from 购物信息 wher

分享两道笔试题目

前几天,给成都的某家公司投了个简历,给发了两道笔试题目,与大家分享一下.附上自己的解题过程,写得不好的地方,还请博友多多指教. 一 .  设计程序输出销售及收费清单 一个电商平台对在其平台之上销售的除了书籍.食品以及药物以外的商品收取 10% 的费用.而对于进口的商品则额外收取 5% 的附加费用.对于平台抽取的费用计算时,舍入的规则是:对于 n% 抽取率,价格为 p的商品, np/100 的值就近舍入到 0.05(如: 7.125 -> 7.15, 6.66 -> 6.70 ). 卖家卖出一些

猜数字游戏(笔试题目)

在CSDN上看到一个笔试题目..收藏一下 机试就一个题目:写一个猜数字游戏,电脑随机生成一个数字(比如 1-100 之间)让玩家猜,如果没猜中,就告诉玩家猜的数字是大了还是小了,直到猜中为止,最后告诉玩家猜了多少次.整个游戏用最简单的控制台输入输出就行 package com.sun.demo; import java.util.Random; import java.util.Scanner; public class Test01 { public static void main(Stri

GameLoft笔试题目 [Online Network Programmer Test]

gameloft 笔试题目是英文的,前面全部是理论的,最后两道是编程题目. 1 2 3 4 5 最后两道编程题目 其实还算简单: #include <stdio.h> #include <string.h> #include <iostream> std::string itoa(int number){ char nstr[15]; sprintf(nstr,"%d",number); return std::string(nstr); } usi

C++笔试题目大全(笔试宝典)(不断完善中)

1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数. malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符.它们都可用于申请动态内存和释放内存.对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数.由于 malloc/free

(转)嵌入式C开发人员的最好笔试题目

约定:   1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了    2)数据类型             char 一个字节 1 byte        int 两个字节 2 byte (16位系统,认为整型是2个字节)        long int 四个字节 4 byte        float  四个字节4 byet        double 八个字节 8 byte        long double 十个字节 10 byte        pointer 两个字节 2

2015腾讯暑期实习笔试题目

2015腾讯暑期实习笔试题目 (1).层次遍历序列为ABCDEFG的二叉树,其中序遍历的序列是什么? (2).ABCABC为入栈的顺序,倘若出栈的顺序为ABCCBA,那么,设栈的操作为PUSH和POP,则PUSH和POP的可能序列是什么? (3).使用顺序数组存储堆,90,31,53,23,16,48:16,31,23,90,53,48:这两个序列是否符合堆的定义. (4).稀疏矩阵的存储结构可以是什么? (5).根据后序遍历和中序遍历的序列,如何恢复此二叉树. (6).Linux常用命令:ls

百度笔试题目01

将一串很长的字符串中的baidu改成等长的单词(hello) 问题所在 用宏定义定义了一个值为100000的maxn,字符串的长度为10000,但是不知道满不满足百度笔试题目的很长的字符串 #include<stdio.h> #include<string.h> #define maxn 100000 int main() { long int len,i,num=0; int k,j; char s[maxn]; gets(s); len=strlen(s); for(i=0;i