- 博客(47)
- 收藏
- 关注
原创 【动规入门】
1.最长公共子序列和最长公共连续子序列(子串)以"hellowrold","loop"为例1.1非连续(子序列)这个状态转移方程要好好领悟dp[i+1][j+1] = Math.max(dp[i][j+1],dp[i+1][j]);2.连续(子串)package leetcodego.dp;import java.util.Scanner;public class LCS...
2020-03-20 17:37:35
177
原创 【二分之美】
当看到有序数组,时间复杂度限定为logN时,便想到二分法。一、leetcode4寻找两个有序数组的中位数题目里要求了时间复杂度为logN,如果不做要求可以使用双指针分别指向两个数组的头部,一直移动到length之和的一半。我们不妨用另一种思路,题目是求中位数,其实就是求第 k 小数的一种特殊情况,而求第 k 小数有一种算法。假设我们要找第 7 小的数字。7-7/2=4,4-4/2...
2020-03-13 11:48:51
183
原创 【剑指offer】约瑟夫环问题
推公式一:理解原始的约瑟夫环问题,简化为10个人,报数到3枪毙。那么我们此时用f(n)表示n个人的时候,能够存活的位置索引。由上图显然可以得到f(1)=0,f(2)=1,…,f(10)=3。但是我们要找的是通项公式。从图中也可以很直观的看到,n=9时d的位置索引就是n=10时循环左移了3位。那么可以得到f(10) = (f9 + 3) % 10,因为是循环左移,所以需要加一个取余,防止越界。...
2020-03-07 21:31:15
518
原创 【剑指offer】位操作专题
一、思路:首先:位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。我们首先还是先异或,剩下的数字肯定是A、B异或的结果,这个结果的二进制中的1,表现的是A和B的不同的位。我们就取第一个1所在的位数,假...
2020-03-04 18:37:40
147
原创 理清链表的易混淆概念
1. 两个节点相等/公共节点(pHead1==pHead2)当一个节点相等后,说明这个节点后面的节点都重合了,肯定也是相等的。公共节点,两个链表从某一节点开始,他们的next都指向同一个节点。但由于是单向链表的节点,每个节点只有一个next,因此从第一个公共节点开始,之后他们的所有节点都是重合的,不可能再出现分叉。...
2020-03-02 23:02:43
142
原创 java中的常用工具
1、List基本类型转Array如果是引用类型,直接toArray的时候指定泛型即可,但如果是基本类型则会报编译错误,所以采用如下方式://以int型为例list.stream().mapToInt(i -> i).toArray())2、对List中的元素按照某种规则排序private ArrayList<ArrayList<Integer>> res ...
2020-02-22 23:16:22
159
原创 【剑指offer:栈和队列专题】弹栈顺序、丑数
一、弹栈顺序解题思路一开始都看不懂题目…后来才好像明白是什么个意思…假设有一串数字要将他们压栈: 1 2 3 4 5如果这个栈是很大很大,那么一次性全部压进去,再出栈:5 4 3 2 1但是,如果这个栈高度为4,会发生什么? 1 2 3 4都顺利入栈,但是满了,那么要先出栈一个,才能入栈,那么就是先出4,然后压入5,随后再全部出栈:4 5 3 2 1那么我总结了所有可能的出栈情况:...
2020-02-21 12:04:02
179
原创 【剑指offer】字符串专题:正则匹配/字符流判断
分析:正则表达式类型的题,主要在于理清一层层的逻辑。import java.util.Arrays;/* 首先,考虑特殊情况: 1>两个字符串都为空,返回true 2>当第一个字符串不空,而第二个字符串空了,返回false(因为这样,就无法 匹配成功了,而如果第一个字符串空了,第二个字符串非空,还是可能匹配成...
2020-02-17 11:47:30
153
原创 【剑指offer中的排序算法】推排序(大顶堆/小顶堆)/归并排序
堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: 小顶堆:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2] 大顶堆:Key[i]>=Key[2i+1]&&key>=key[2i+2]题:如何得到一个数据流中的中位数?(动态、实时,在任意时刻都能够直接拿到我们想要的均值而不去计算下标取值)思路:需要求的...
2020-02-14 22:38:23
281
原创 AOP两种实现方式:JDK动态代理和cglib
JDK动态代理JDK动态代理,只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。实现步骤大概如下:定义一个实现接口InvocationHandler的类通过构造函数,注入被代理类实现invoke( Object proxy, Method method, Object[ ] args)方法在主函数...
2020-02-13 23:27:36
203
原创 【剑指offer】二叉树专题
一、给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析法一:既然给了二叉树的某个结点,且二叉树存储着指向父结点的指针(next),那我们可以先找到根节点,再对树进行中序遍历,最后根据中序遍历结果找到给定结点的下一结点法二:以该二叉树为例,中序遍历为:{D,B,H,E,I,A,F,C,G}仔细观察,可...
2020-02-13 22:44:39
95
原创 【Leetcode股票专题】状态转移
参考大佬的题解对状态的理解这个问题的「状态」有三个,第一个是天数,第二个是允许交易的最大次数,第三个是当前的持有状态(即之前说的 rest 的状态,我们不妨用 1 表示持有,0 表示没有持有)。而且我们可以用自然语言描述出每一个状态的含义,比如说 dp[3][2][1] 的含义就是:今天是第三天,我现在手上持有着股票,至今最多进行 2 次交易。再比如 dp[2][3][0] 的含义:今天是第...
2020-02-04 22:41:11
166
原创 【剑指offer 链表专题】删除重复节点,复制链表
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5因为可能会删除头结点,例如{1,1,1,2},删除了头结点1和第一个结点1,结果应为{2}。但是如果直接将函数传进来的pHead作为头结点,即初始化preNode=pHead,那...
2020-02-04 16:04:46
136
原创 【回溯专题】leetcode93/17/39/40/46/47
之前一直对回溯理解不深,今天刷一下leetcode的回溯专题。不得不说,大佬们写的递归回溯代码真的优美,我i了。17题思路树状图:public class code17 { //一个映射表,第二个位置是"abc“,第三个位置是"def"。。。 //这里也可以用map,用数组可以更节省点内存 String[] letter_map = {" ","*","abc",...
2020-01-11 21:47:49
197
原创 【leetcode】206/92.链表反转 dfs(深度理解递归)
由浅入深:先看206题(简单)参考大神的解析https://leetcode-cn.com/problems/reverse-linked-list-ii/solution/bu-bu-chai-jie-ru-he-di-gui-di-fan-zhuan-lian-biao/写不出来如此简洁优秀的递归代码,那么就分析一下优美的代码吧! public ListNode reverse...
2020-01-07 21:20:52
221
原创 【leetcode】91.编码(类似跳台阶)dfs/memorize/dp
法一:递归思路:很容易想到递归去解决,将大问题化作小问题。比如 232232323232。对于第一个字母我们有两种划分方式。2|32232323232 和 23|2232323232所以,如果我们分别知道了上边划分的右半部分 32232323232 的解码方式是 ans1 种,2232323232 的解码方式是 ans2 种,那么整体 232232323232 的解码方式就是 ans1...
2020-01-07 16:01:58
229
原创 Spring常用注解
1 @requestParam @GetMapping("/queryPortfolioList") public PmsResult<List<PmsPortfolioInfoDTO>> queryPortfolioList( @RequestParam(required = true) String createdBy, @RequestParam(re...
2020-01-02 15:50:42
85
原创 【leetcode】(1)43.字符串相乘
思路:竖式乘法,遍历num1 的所有位,与num2 相乘再相加。补0:num1 除了第一位的其他位与 num2 运算的结果需要补0。预备知识:leetcode415.字符串相加 public String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) { ...
2019-12-28 17:23:01
101
原创 【leetcode】(1)33.搜索旋转排序数组
思路:半排序数组,进行判断,一共四种情况:数组前半部分有序且目标值在前半数组中数组后半部分有序且目标值在后半数组中数组前半部分有序且目标值在后半数组中数组后半部分有序且目标值在前半数组中前两种直接进行二分查找,后两种进行递归。 public int search(int[] nums, int target) { int start = 0; ...
2019-12-28 17:02:39
111
原创 【leetcode80】(0)删除排序数组中的重复项 II
思路:一开始一直在想怎么删除数组中的元素把开销降到最低,后来才看到题目要求“不需考虑超出新长度后的元素”。这样就没必要做数组删除了。 public int removeDuplicates(int[] nums) { if(nums.length<3) return nums.length; int pos = 2; ...
2019-12-26 11:10:19
143
原创 【leetcode】79.单词搜索(典型的dfs+回溯)
注意点:题目中要求同一个单元格内的字母不允许被重复使用,实现方法如下:定义一个boolean型的数组,每走到一个位置,该数组就置1,如果下面的路不通出现回溯,再置零完整代码:public class code79 { int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}}; String word; char[][] board;...
2019-12-25 10:53:45
172
原创 【leetcode】15.三数之和
思路:数组遍历,双指针首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集如果 nums[i] == nums[i-1],则说明该数字重复,会导致结果重复,所以应该跳过当 sum == 0 时,nums[L] == nums[L+1]...
2019-12-20 20:24:28
105
原创 【leetcode】6.Z字型变换
思路:有几行就有几个StringBuilder,从上往下再从下往上依次向每一行的SB中addchar。最精彩的地方是flag,用于实现到顶或到底转换方向:完整code: public String convert(String s, int numRows) { if(numRows==1) return s; List&...
2019-12-16 21:27:11
106
原创 java之从字符串比较到==和equals方法区别
我们先看代码String str1 = new String("hello");String str2 = "hello"; System.out.println("str1==str2: " + (str1==str2)); \\1System.out.println("str1.equals(str2): " + str1.equals(str2)); \\2输出结果:st...
2019-12-10 21:19:35
85
原创 【leetcode130】典型dfs问题:填充区域
思路:根据“边界上的0不会被填充”,那么也就意味着边界上的0的附近(上下左右四个方向上)的0也不会被填充,因此可以做dfs递归,不断寻找边界0附近的0,也就是dfs的核心(不撞南墙不回头)。package com.leetcode;public class code130 { public void solve(char[][] board) { int m = b...
2019-12-07 17:15:57
211
原创 【leetcode】131.分割回文串
思路:DFS+回溯class Solution { List<List<String>>list=new ArrayList<>(); String s; public List<List<String>> partition(String s) { //从头到尾递归+回溯。 t...
2019-11-30 18:47:51
99
原创 【leetcode】137. 只出现一次的数字 II
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。参考一下大神的思路https://juejin.im/post/5cb962dbf265da03761e8601首先一般看到这种题,我们第一反应是做状态记录,比如数字x出现了y次.然后从记录里查询出现了一次的数字.但是 现在我们的空间复杂度被限制成了O(1),不可能对所有的64位二...
2019-11-29 20:20:47
149
原创 【leetcode】106.根据中序遍历和后序遍历构造二叉树
方法:在递归方法中,传入子数组的边界索引注意:在递归方法中,有一个数组的边界索引,得通过计算得到,计算的依据是递归方法传入的“中序遍历数组”(的子数组)和“后序遍历数组”(的子数组)的长度是一样的。我的办法是解方程计算未知数。具体需要计算哪个参数我在下面的代码中已经注明了。下面展示了一个计算边界的方法。尽管中序遍历和后序遍历方式不一样,但我们从图中可以看出:除了根节点的相对位置不同,根节...
2019-11-26 21:22:51
106
原创 【leetcode刷题】386字典排序
public List<Integer> lexicalOrder(int n) { List<Integer> res = new ArrayList<>(); for(int i=1;i<10;i++){ if(i<=n){ res.add(i);...
2019-11-25 20:34:05
118
原创 java queue队列的增删改查用法
offer,add 区别:一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。poll,remove 区别:remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 C...
2019-11-13 16:40:45
926
原创 评分卡模型开发文档
结构1 包 score_card.data_preprocess(用于数据预处理)1.1 方法 CalNoOfDays(用于将两列日期转换为相差的天数)1.2 方法 SplitData(用于数据集的划分)2 包 score_card.woe(用于分箱,计算各个档位的woe值,计算IV值)2.1 类 WOE(执行已有分箱算法,计算各个档位的woe,VI值以及vif)2.1.0 方法 do...
2019-07-25 17:08:05
619
原创 华泰实习日记:评分卡建模流程
总包score_card1 包 score_card.data_preprocess(用于数据预处理)1.1 方法 CalNoOfDays(用于将两列日期转换为相差的天数)1.2 方法 MissingValue(用于填充缺失值,4种方法)1.3 方法 SplitData(用于数据集的划分)2 包 score_card.woe(用于分箱,计算各个档位的woe值,计算IV值)2.1 类 W...
2019-07-11 15:23:37
263
原创 【华泰实习日记】7.1 初识mock
梳理mock的思路实际测试代码和单元测试代码是分开在 2 个文件中的,第一个关卡往往就是怎么把这 2 个文件有机结合起来。这里的关键就是:源代码该怎么写就怎么写,不需要考虑为 mock 留下什么接口之类的东西。单元测试文件中,首先写单元测试代码,就和正常的一样,最开始的时候只需要 import mock 模块即可。判断要测试的函数中是否用了其他函数,有可能使用了多个外部函数,那么就判断哪...
2019-07-01 16:48:57
252
原创 【华泰实习日记】7.1 pytest入门:登录函数传参
(接6.27)7 登录函数传参为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数。比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行。如果想把登录操作放到前置操作里,也就是用到@pytest.fixture装饰器,传参就用默认的request参数,user = request.param 这一步是接收传...
2019-07-01 13:23:09
349
原创 【华泰实习日记】6.27 pytest入门
(接6.27)4.3 fixture中的setupfixture通过scope参数控制setup级别@pytest.fixture(scope="module")def open(): print("打开浏览器,并且打开百度首页")def test_s1(): print("用例1:搜索python-1")def test_s2(open): print("...
2019-06-27 17:44:46
216
原创 【华泰实习日记】6.26 pytest入门
0 写在前面距离辞去上一份实习已经过去了6天,为了来到华泰也下了好大决心,到底能学到多少东西,还需时间来给出答案。体检完已经11点20了,打了电话给实习导师王工,很热情的山东老哥,给人特别亲切的感觉。聊了一会儿发现不仅仅是校友,最骚的竟然是老费的师弟(吃惊。听说华泰的食堂巨好吃而且免费,很遗憾今天工卡没下来,王工请我去公司外面吃了顿小炒,也大致交流了一下现在项目组正在做的事情。目前要开发一个平台...
2019-06-26 17:28:37
275
原创 【JavaWeb学习笔记】重定向和请求转发的区别
重定向 /* 之前的写法 response.setStatus(302); response.setHeader("Location", "login_success.html");*/ //重定向写法: 重新定位方向 参数即跳转的位置 response.sendRedirect("login_success.html"); 1. 地址上显示的是最后的那个资源的路径...
2019-05-20 21:01:53
195
原创 【JavaWeb学习笔记】getAttribute和getParameter的区别
对getParameter过程,如下图:对getAttribute过程,如下图:两者区别:①getParameter()获取的是客户端设置的数据,getAttribute()获取的是服务器设置的数据。 ②getParameter()永远返回字符串,getAttribute()返回值是object类型既然parameter和attribute都是传递参数,为什么不直接使用parame...
2019-05-20 19:51:42
292
2
原创 【java学习笔记】网络编程(TCP协议)
服务端创建ServerSocket(需要指定端口号)调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流输入流可以读取客户端输出流写出的数据 * 输出流可以写出数据到客户端的输入流 //做成多线程的 ServerSock...
2019-04-22 21:05:45
341
1
原创 【Java学习笔记】开启多线程的两种方式
一、继承Thread方法定义类继承Thread重写run方法把新线程要做的事写在run方法中创建线程对象开启新线程, 内部会自动执行run方法匿名内部类实现: new Thread() { //1,new 类(){}继承这个类 public void run() { //2,重写run方法 for(int i ...
2019-04-15 15:50:00
144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人