- 博客(56)
- 资源 (3)
- 收藏
- 关注
转载 !!字节跳动高频算法考题!!
作者:一个搬砖的胖子链接:https://www.nowcoder.com/discuss/445445?channel=2001&source_id=home_feed来源:牛客网前言星尘大佬总结的100题目,让我突发奇想:高频题目是可以一定程度预测面试的考题的,而且我觉得按岗位去分别统计题目绝对可以更加精准地预测。因此,我总结了今年从5月1号到6.29号的这两个月的大概含120多篇字节跳动的面经,从中抽取了190多条涉及leetcode或剑指offer的考察信息,并..
2020-07-01 14:47:53 3028
原创 linux下启动和关闭jar项目
1、自己将项目(比如用springboot框架写的项目)打包成jar包,然后我们需要将它用软件传输到linux版本的服务器上。2、自己编写sh命令,用于启动和关闭项目,并打印日志信息到服务器本地。1)、start_项目名.sh文件#For shutting down the 你的项目名.jarpid=$(ps -ef | grep 你的项目名.jar| grep -v "grep" | awk '{print $2}')kill -9 $pidecho "The 你的项目名.jar no
2020-05-22 11:00:32 1363
原创 关于sigmod激活函数图像不是以0为中心的问题探讨
这个问题之前也遇到过,没有深究,最近一位网友向我询问此事,我总结如下:首先我们要知道反向传播的流程:1、概念:前项传播: 反向传播:反向传播的思想其实就是,对于每一个训练实例,将它传入...
2020-05-19 14:51:10 2928 8
原创 35、二叉排序树的添加和删除节点
思路:二叉排序树的定义:形如图1所示,每棵二叉树有一个根节点,根节点下面至多有两个子节点,每个节点只能最多有两个分支节点,并且左侧分支子节点数值小于父节点数值,右侧子节点数值大于父节点数值。 ...
2020-05-15 18:17:45 1884
原创 34、哈夫曼树压缩文本和解压文本
思路:利用输入流和输出流进行文本的读出和写入,注意:压缩文件时会用到对象流(ObjectOutputStream写入文件),解压文件时,也会用到对象流(ObjectInputStream,读出文件)代码://压缩文件 public void zipFile(String srcFile, String dstFile) { InputStream is = null; OutputStream os = null; ObjectOutputStream oos = null;
2020-05-15 11:47:42 486
原创 33、哈夫曼解压(有问题,待解决)
哈夫曼编码的时候,我们得到了哈夫曼哈希表、编码后的字节数组,我们根据这两个,便可以进行解码。思路:1、首先将字节数组转化为二进制字符串:/** * 将一个byte 转成一个二进制的字符串, 如果看不懂,可以参考我讲的Java基础 二进制的原码,反码,补码 * @param b 传入的 byte * @param flag 标志是否需要补高位如果是true ,表示需要补高位,如果是false表示不补, 如果是最后一个字节,无需补高位 * @return 是该b 对应的二进制的字符串,(注
2020-05-14 19:27:34 651
原创 32、哈夫曼编码之数据压缩
前言:前面讲了如何如何生成哈夫曼树,如何用哈夫曼树进行编码,进而得到哈夫曼哈希表,本节主要讲实例,如何对字符串进行压缩展示。思路:1、将字符串用生成哈夫曼树,生成哈夫曼哈希表 2、将原byte[]通过哈夫曼哈希表,生成新的byte[],进而压缩了数据代码://数据压缩:将字符串压缩 public byte[] zip(byte[] bytes, Map<Byte, StringBuilder> hfmMap) { StringBuilder stringBuilder =
2020-05-14 14:28:39 662
原创 Java一个汉字占几个字节(详解与原理)
1、先说重点:不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个、3个、4个字节;2、以下是源码: 1 @Test 2 public void test1() throws UnsupportedEncodingException { 3 String a = "名"; 4 System.out.println("UTF-8编码长度:"+a.getBytes("UTF-8").length)...
2020-05-14 12:42:36 1889
原创 31、赫夫曼编码
1、赫夫曼编码概念是一种编码方式,属于一种程序算法。 广泛用于数据文件的压缩,其压缩率在20%~90%左右。一般的编码流程:字符穿 => ASCLL编码编码发展过程:定长编码(不进行处理)=>变长编码(减少长度,但是有多异性) => Hefuman编码2、赫夫曼编码思路1、先总结每个字符使用频率,并存入节点2、将频率作为权值,将每个字符作为叶子节点,构建赫夫曼树3、将赫夫曼树每个节点(非叶子节点)的左边分支标为0,右边分支标为1。那么,从根节点到叶子节点的分支上
2020-05-13 18:22:46 412
原创 30、赫夫曼树
1. 概念赫夫曼树:给定n个权值作为n个叶子节点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也叫赫夫曼树(Huffman Tree)。路径:从一个节点往下可以达到的孩子或者孙子节点之间的通路,称之为路径。路径长度:通路中的分支数目称之为路径长度,若规定根节点的层数为1,则从根节点到第L层节点的路径长度为L-1。权:将书中的节点赋给一个有某种意义的数值,则这个数值称之为给节点的权。带权路径长度:从根节点到该节点之间的路径长度与该节点的权的乘积。.
2020-05-13 16:17:51 126
原创 29、堆排序
思路:1、首先是初始化堆,建立从小到大的升序堆,只需要保证父节点的值大于相邻的子节点值即可2、将数组收尾换位置,确保最大的元素在数组的尾部。3、此时从头部元素开始调整堆,使他满足从小到大的序列,以此执行2-3步,直到执行n-1次(n:数组的长度) 代码: package heap; import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;public class Heap
2020-05-12 11:54:38 136
原创 28、线索二叉树
1、前序和中序线索二叉树 思路就是构建个pre指针,在交换时,注意pre和curNode节点的指针指向问题代码:package tree;import javax.xml.soap.Node;public class ThreadBinaryTreeDemo { public static void main(String[] args) { // TODO Auto-generated method stub //1、**************演示前中后序打印结果***
2020-05-09 12:18:23 155
原创 27、数组存储完全二叉树
思路: 简单介绍了用数组存储完全二叉树的问题,重点就是找到父节点和子节点的关系(Node = 2leftNode+1,Node = 2rightNode+1 ) 下面的代码就是二叉树用数组存储后,怎么对数组进行前中后遍历的问题。 代码: package tree;public class ArrBinaryTreeDemo { public static void main(String[] args) { // TODO Auto-generated method stub..
2020-05-08 18:53:45 1652
原创 26、二叉树的应用
思路:写了树节点类、树类和测试类,并写了前中后序遍历和搜索,并写了删除函数。相关代码package tree;public class BinaryTreeDemo { public static void main(String[] args) { //1、**************演示前中后序打印结果*************** // TODO Auto-generated method stub BinaryTreeNode binaryTreeNode1
2020-05-08 18:49:17 156
原创 25、哈希表的应用
引入谷歌问题:添加公司员工的个人信息(id、姓名),并且,能通过id查询该员工的信息。 要求:不使用数据库、速度越快越好=》哈希表(散列) 思路:建立三个类:员工信息节点类、单链表类、哈希表类代码:package Hash;import java.awt.RenderingHints.Key;import java.util.Scanner;import or...
2020-05-08 15:39:19 955
原创 24、查找算法:斐波那契查找算法
铺垫知识:黄金分割点:黄金分割点是指把一条线段(长度为H)分割成两部分A和B,其中A/H=B/A,取前三位近似值为0.618,由于按照这个比例设计的造型十分美丽,所以称作**黄金分割**,也叫**中外比**。斐波那契数列:{1,1,2,3,5,8,13,21,34,55...}这个数列满足如下性质:1、index为0和1的元素的值都为1;2、从第三个元素开...
2020-05-07 17:32:04 326
转载 位运算有什么奇技淫巧?
计算机中的数在内存中都是以二进制形式进行存储的,用位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,这会大大提高程序的性能。位操作符& 与运算 两个位都是 1 时,结果才为 1,否则为 0,如 1 0 0 1 1 & 1 1 0 0 1------------------------------ 1 0 0 0 1...
2020-05-07 17:24:16 215
转载 list 直接输出为什么是一个数组?
在collection,例如list中,List<Integer>list=newArrayList<>();list.add(1);System.out.println(list);直接借助于类对象的名字就可以输出正确list,而数组则必须使用for循环逐个输出,或者是使用Arrays中tostring方法。这是为什么?小白,知道这样写,只想知...
2020-05-07 15:14:41 1272 1
原创 23、查找算法:差值查找(二分查找优化)
思路:针对二分查找算法中的mid定义,我们可以优化些,二分查找中,mid = (left + right)/2我们可以写成mid = left + (right - left)/2针对除数2,我们可以有个优化,用(targe - arr[left])/(arr[right] - arr[left])来替代2,这样,每次取mid时会更加接近targe值代码:package Se...
2020-05-06 16:43:21 335
原创 22、查找算法:顺序查找+二分查找
1、顺序查找过于简单,此处就不再赘述。2、二分查找(适用于有序数组)思路: 要找的元素为targe,数组为arr:1、首先定义left和right(left:数组最左边的index,right:数组左右最右边的index)2、定义mid = (left+right)/2,比较mid处的元素和targe的大小 2.1、如果arr[mid]>targe,那么要找的元素在le...
2020-05-06 16:05:15 261
原创 21、排序方法总结
列出各种排序的时间复杂度、空间复杂度、是否稳定等属性。其中,基数排序应该是O(d*(len+len)),其中d为元素最大的位数,len为元素数量。简称O(n*k)...
2020-05-06 15:16:30 118
原创 20、基数排序
思想:用空间换时间,他用一个二维数组(10*n)和一位数组(1*10),用于排序的道具,该排序不是依据的传统的比较的思想,她是采用,先让所有元素按照个位的数字,放在二维数组中(二维数组中,第一维:个位、十位、百位...,第二位用于盛放数据:一个数据、两个数据...),然后以为数组记录每个个位数组里数据的数量,然后再将二维数组中的数据,依据从小到大的顺序拿出来,这个新组成的数据,就是第一轮排序后...
2020-04-30 19:24:00 161
原创 19、归并排序
思想:归并排序个人理解的是==分治==思想,先把整体一直递归的划分成单独的最小单元(只含有一个元素的单独个体),然后回溯将单个个体排序,组成有序的小个体,然后对这些有序的小个体进行排序代码:package Sort;import java.util.Arrays;public class MergeSort { public static void main(String[...
2020-04-30 19:23:25 130
原创 CPU32和CPU64区别
1. cpu32位和64位的区别:操作系统方面:1、32位CPU一次可以处理32位(单位:bit)二进制,只能安装32位操作系统;2、64位CPU则一次可以处理64位二进制数,可以安装32位系统和64位系统(大牛拉小车)。运算速度方面:64位CPU的处理速度(运算速度)比32位CPU快一倍。寻址能力方面:32位cpu寻址能力是2的32次方(单位:byte,不是bit),等...
2020-04-30 14:39:36 2564
原创 18、快速排序(代码)
先分享个视频教学网址,讲的很nice!https://www.bilibili.com/video/BV1it41167v2?from=search&seid=7944545082422790984概念快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。思路:快...
2020-04-29 18:48:46 195
原创 17、希尔排序
问题提出:当待排序的列表整体呈逆序时(最小的元素在后面),用直接插入排序,会极大的浪费时间,故提出希尔排序(ShellSort)思想首先将数组分成len/2组,即增量gap = len/2,然后对每一组进行直接插入排序;然后继续将数组分成gap=gap/2组,然后对每一组进行直接插入排序...直到gap = 1;为止代码:package Sort;import java...
2020-04-29 12:16:53 86
原创 16、直接插入排序算法
思路:1、假设前n个已经有序,每次循环都是将无序表中的一个元素插入到有序表中去。8万条数据测试代码:package Sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;public class InsertSort { public static voi...
2020-04-29 10:35:02 103
原创 15、简单选择排序
思路:1、给一个数组{9,4,7,2,0,1,-1,5,-6},长度为n2、共进行n-1次遍历3、第一次遍历时,先从n个数据中取出最小的数据,和index = 0的数据进行交换。3、第二次遍历时,先从n-1个数据中取出最小的数据,和index = 1的数据进行交换。4、重复以上步骤,直到进行第n-1次遍历时间复杂度:O(n^2) ;内排序;不稳定;8万条数据约3秒代码:...
2020-04-29 10:34:29 124
原创 14、冒泡排序
思路:冒泡排序属于比较排序算法,通过每次和相邻的元素进行比较,将逆序的元素交换位置,最终将最大的元素排在表尾时间复杂度O(n^2)最好:O(n);最差:O(n^2);稳定的算法;内排序代码package Sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Dat...
2020-04-28 17:27:05 112
原创 12、八皇后问题
思路:1、先将第一个皇后放在第一行第一列2、将第二个皇后放在第二行第一列,看否冲突,若冲突,则依次放在第二列、第三列...遍历完后找到不冲突的位置3、继续第三个皇后,直到所有皇后都找到合适的位置。4、当得到一个正确解后,在回退到上一个栈,就开始进行回溯,即将第一个皇后在第一列的解全部得到。5、然后回头继续将第一个皇后放第二列,后面循环2-4步。代码:package resurs...
2020-04-28 11:35:18 416
原创 11、迷宫问题
思路:1、先用二维数组模仿迷宫,并用数字代表墙,0:表示未走过;1:代表墙,表示不能走;2:表示走过,能走;3:表示走过,走不通2、指定走出迷宫策略:按照下、右、上、左的顺序走迷宫代码实现:package resursion;import java.util.ArrayList;public class Migong { public static void main(S...
2020-04-28 09:39:42 233
原创 8、逆波兰表达式(后缀表达式)
1 中缀表达式转后缀表达式(从左到右)方法一:直接转换法(1)首先确定表达式表达式A的运算顺序,然后加括号:((1 + (( 2 + 3)* 4 )) – 5 )(2)从最里面的一层括号开始运算,转换成后缀表达式的方法为:(忽略括号)数字在前,符号在后。 1)( 2 + 3) => 23+ 2) (( 2 + 3)* 4 ) =>...
2020-04-27 16:00:40 859
原创 7、栈应用:加减乘数计算器
思路:1 首先分为两个栈:数栈和操作符栈(简称符栈)2 定义index变量,用于遍历字符串“6+1*2”3 如果当前遍历的字符是数字,直接入数栈4 如果当前遍历的字符是操作符,分为两种情况: 4.1 如果符栈为空,直接将操作符放入符栈; 4.2 如果符栈不为空,又分为两种情况: 4.2.1 如果当前操作符A的优先级小于或者等于符栈顶操作符的优先级,则符栈pop出一...
2020-04-26 12:31:40 197
原创 单向环装链表操作以及约瑟夫问题求解
1. 节点构建//构建节点class Item{ private int no; private Item next; public Item(int no) { this.no = no; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } pu...
2020-04-23 16:01:14 149
原创 双链表操作
1、节点构建代码class HeroNode2{ private int no; private String name; private String nickName; HeroNode2 next; HeroNode2 pre; public HeroNode2(int no,String name,String nickName) { this.no = no;...
2020-04-23 15:59:50 136
原创 单链表面试题(百度、腾讯...)
学习了单链表的应用(面试题)1. 求单链表的有效节点- 思路:1、新增辅助变量num,用于记录单链表有效节点的个数,新增curNode指针,用于遍历单链表的所有节点2、num在遍历单链表的所有节点过程中,自增3、得出的num即为单链表的有效节点- 代码://获的链表的长度public static int getLength(HeroNode headNode) {...
2020-04-22 15:20:45 520
原创 链表的一系列操作(内附源码,学习网站)
# 链表的一系列操作## 1. 链表的结构- data域- next域(指向下个节点)## 2. 链表的操作### 2.1. 链表的创建- 构建节点信息 class HeroNode{ //data域 private int no; private String name; private Str...
2020-04-21 13:29:50 122
原创 头条面试题(2-万万没想到之聪明的编辑)
问题来源:我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现了一个发现拼写错误的捷径:1.三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello2.两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字...
2020-01-21 10:54:43 308
原创 头条面试题(1-找零问题)
问题:有4种硬币,分别价值:1、4、16、64元;一种纸币,价值:1024元。小明去超时买东西,共花费N元(0<N<1024),他拿出一张纸币给售货员,售货员只有硬币可以给小明。问:售货员最少找给小明多少个硬币?思路:贪心算法,依次把价值64、16、4、1的硬币的个数算出来,再相加即可得到最少硬币个数。代码(C++):#include<iostream...
2020-01-21 10:20:07 569
原创 彻底理解0-1背包问题
0-1背包问题概念背包问题本质是个求最优解的问题:有个背包有V大小的空间可以存放物品,现在有n个物品,每个物品体积分别为v1、v2...、vn,价值分别为w1、w2...、wn。现在求解:如何使物品尽可能多的放在背包中,使得背包中的物品总价值最大?0-1背包问题指的是每个物品只能使用一次解决这类问题,大致有2类方法:递归算法、动态规划算法,下面详细讲解3种算法(借鉴了博主的论文)。...
2020-01-16 14:05:16 750
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人