• 2021届字节跳动客户端提前批一面


    面试完之后发现,自己的算法功底。还有待提升,对操作系统,java虚拟机,多线程,进程等知识还有很大的欠缺,深度还远远不够,所以还是努力的刷题

    以下是主要问到的问题:

    进程的信号量,线程的信号量,线程的中断, B+ 树,

    手撕了一道算法题,最好的解法应该是Djistra算法,广度优先遍历,但当时我没有想到,要求最优解,我只是根据深度优先遍历找到了一个解。 以下是我的解答


    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedList;
    import java.util.Queue;

    /**
    * 问题描述: 已知有6个村庄,分别为 A B C D E F 对应的编号分别是0-5
    * 已知村庄之间的距离分别为:
    * (0,1,5) 村庄A与B之间距离5 公里
    * (0,2,1)
    * (0,3,8)
    * (1,2,6)
    * (1,4,4)
    * (2,3,3)
    * (2,4,1)
    * (3,4,1)
    * (3,5,1)
    * (4,5,4)
    * 现在需要找到一条路,从A 村庄,到达 F村庄的,使得这个经过的总的路径最短,求这个最短路径
    * */
    public class Prob11 {
    public static void main(String[] args){
    byteDance obj = new byteDance(6);
    obj.insertPoint("A");
    obj.insertPoint("B");
    obj.insertPoint("C");
    obj.insertPoint("D");
    obj.insertPoint("E");
    obj.insertPoint("F");
    obj.insertWay(0,1,5);
    obj.insertWay(0,2,1);
    obj.insertWay(0,3,8);
    obj.insertWay(1,2,6);
    obj.insertWay(1,4,4);
    obj.insertWay(2,3,3);
    obj.insertWay(2,4,1);
    obj.insertWay(3,4,1);
    obj.insertWay(3,5,1);
    obj.insertWay(4,5,4);

    for(int i=0;i<obj.getCountOfTower();i++){
    obj.fn(i);
    }
    for(int i=obj.getCountOfTower()-1;i>-1;i--){
    obj.fn(i);
    }
    System.out.println(Arrays.toString(obj.getLengths()));
    System.out.println("从A村庄到F村庄的最短路径距离是 : "+ obj.getLengths()[5]);
    }
    }
    class byteDance{
    private ArrayList<String> towers;
    private int[][] ways;
    private Queue<Integer> records;
    private int[] lengths;

    public byteDance(int n ){
    towers = new ArrayList<>();
    ways = new int[n][n];
    records = new LinkedList<>();
    lengths = new int[n];
    for(int i=1;i<n;i++){
    lengths[i] = 100;
    }
    }
    // 添加顶点
    public void insertPoint(String towerName){
    towers.add(towerName);
    }
    // 添加边
    public void insertWay(int n1,int n2,int length ){
    ways[n1][n2] = length;
    ways[n2][n1] = length;
    }

    public void fn(int index ){
    int temp = 0;
    for(int i=0;i<ways.length;i++){
    if(ways[index][i] > 0 ){ // 说明 村庄 index 和 i 之间有一条路 ,路的长度是 ways[index][i]
    temp = lengths[index] + ways[index][i];
    if( temp < lengths[i] ){
    lengths[i] = temp;
    }
    }
    }
    }
    public int getCountOfTower(){
    return towers.size();
    }
    public int[] getLengths(){
    return lengths;
    }


    }




  • 相关阅读:
    C语言32个关键字详解
    C语言格式控制符
    c++关键字详解
    多码流简介
    Jtag管脚定义
    关于RGB信号的电平
    缩略语MSPS
    【转】松下18650的容量判别方法
    电信号在FR4材料中的传播速度
    dropout voltage
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/13288082.html
Copyright © 2020-2023  润新知