算法
我不会GC
这个作者很懒,什么都没留下…
展开
-
逆置链表中的一段
package com.zuochengyun.book.chaptertwo.list;import java.util.ArrayList;import java.util.List;import java.util.regex.Pattern;/** * 反转一个链表的一段 * @author * */public class ListRevertNT...原创 2020-03-06 18:53:57 · 159 阅读 · 0 评论 -
如何仅用递归函数和栈操作逆序一个栈
解题思路:这里使用了两个递归函数getLastValueAndRemove():取出栈中的最后一个元素并在栈中移除;实现就是将栈中元素全部出栈,然后在入栈doReverse():调用上面的函数,不停的将最后一个元素移出来,全部移除后入栈,逆序。package com.zuochengyun.book.chapterone;import java.util.Stack;...原创 2020-01-21 17:59:37 · 179 阅读 · 0 评论 -
图解算法-动态规划
假设你是个小偷,背着一个可装4kg东西的背包。你可盗窃的商品有如下3件。音箱 3000美元 4kg 笔记本电脑 2000美元 3kg 吉他 1500美元 1kg为了让盗窃的商品价值最高,你该选择哪些商品?要点:1.动态规划几乎都需要用到表格(二维数组)2.大问题转化为小问题3.找到公式pac...原创 2020-01-16 12:57:35 · 249 阅读 · 0 评论 -
图解密码学笔记(三)
消息认证码的局限性:可以校验消息的整性,但是无法防止否认数字签名:1.生成消息签名的行为:由消息发送者进行2.验证消息签名的行为:由消息接收者进行,也可以由第三方来完成,这是和消息认证码不同的地方数字签名中的生成签名和验证签名使用的是不同的密钥来完成的,分为签名密钥和验证密钥与公钥密码相类似,区别在于数字签名就是将公钥密码反过来使用公钥密码和数字签名对比: ...原创 2019-11-19 23:24:41 · 174 阅读 · 0 评论 -
图解密码技术笔记(二)
公钥密码的缺点:1.处理速度远远低于对称密码2.难以抵御中间人攻击混合密码系统-用对称密码提高速度,用公钥密码保护会话密钥角色:小A和小B1.小A和小B先进行一次公钥密码流程,这个时候小B拥有小A的公钥2.小B生成对称加密密钥D3.小B将要发送的消息使用密钥D加密4.小B使用小A的公钥对密钥D加密,将加密后的密钥D和消息一起发送密码技术的组合:数字签名:有单...原创 2019-11-08 00:00:03 · 4897 阅读 · 0 评论 -
图解密码技术笔记(一)
对称加密:加密和解密的密钥相同非对称加密:分为公钥和私钥DESDES的秘钥长度 64比特=56比特+8比特;没7比特设置一个用于错误检测的比特,实质上秘钥长度是56比特。DES是以64比特明文为一个单位分组进行加密的,这样的密码算法成为分组密码;Feistel网络加密的各个步骤成为轮,整个加密过程就是进行多次轮的循环,比如DES就是一种16轮循环的Feistel网络;...原创 2019-11-03 23:34:36 · 225 阅读 · 0 评论 -
全排列
这里用到了递归的方式来写:首先 一个数组 1,2,3我们要全排列 可以看成是 1 + 数组{2,3}的全排列 2+ 数组{1,3}的全排列 3+ 数组{1,2}的全排列一个排列的结束就是到了数组最后一个数字的时候 import j...原创 2019-03-03 23:19:14 · 548 阅读 · 0 评论 -
堆排序
堆排序的步骤:第一步:构建堆第二步:交换数组的第一个值(构建好大顶堆后,第一个值为数组的最大值)和最后一个值这个时候数组的最后一个为最大值了,重复上述两个步骤,将数组长度length-1的排序 ,直到length-1 为1的时候停止public class HeadSort { public static void main(String[] args) { int[...原创 2018-10-19 19:45:38 · 97 阅读 · 0 评论 -
快速排序算法
今天在捋一捋快排快排思想:选中一个基数(下面代码选了最左的为基数),把小于基数的数字放在左边,把大于基数的数字放在右边,然后不断递归import java.util.Arrays;/** * 快排 * @author Administrator * */public class MyQuickSort { public static void main(String[] ...原创 2018-10-19 14:18:51 · 115 阅读 · 0 评论 -
判断一个二进制数字有多少个1----java实现
这个题目会有多个解法:需要判断n的二进制有几个1first:通过n向右移位&1,如果n的最后为1,那么与1结果为1,(相信大家都会与运算,hashmap就是用与运算)以此来实现,循环判断有多少个1,结束条件为n=0;second:上述方法有一个缺陷,就是当n为有符号数字时,才用n==0的结束条件会发生死循环,那么我们可以通过移位1来实现,也就是有每次比较去把1向左移,一次来比较...原创 2018-08-20 22:05:13 · 3098 阅读 · 0 评论 -
java树的广度优先遍历思路
我们使用广度优先遍历的办法, 来 遍历一棵树,我们就需要记录下每一层的节点,从每一层的节点中去获取下一层节点,所有我们需要有一个记录每层节点的容器来完成这个工作,简单点的办法就是使用队列,注意队列数据的顺序;创建树的方法:public static TreeNode createTree(){ TreeNode firstLeft=new TreeNode(3); TreeNod...原创 2018-08-18 10:14:39 · 1098 阅读 · 0 评论 -
花式交换值
我们先来看看,我们在学习中,课本中,一般出现排序,都会让你新建一个变量来协助数值的交换,那么这样不就是浪费了资源,那么来看看更高格调的方法一般交换: int a=2,b=1; int tem=0; tem=a; a=b; b=tem; System.out.println("a:"+a+" b:"...原创 2018-05-16 23:10:47 · 149 阅读 · 0 评论