- 博客(14)
- 收藏
- 关注
原创 方格中任两点的可达路径数
暴力搜索的思路:用额外空间记录是否被搜索过,不要想着在原图上进行修改,容易出错记录条件:当前递归顶点为目标顶点回溯的条件:只要一个顶点的所有临接路径都被遍历过了,就可以回溯了,而不是一旦触底就回溯。注意:在思考回溯问题的时候一定要考虑回溯要做什么以及回溯的时机。...
2020-08-05 14:43:02
332
转载 LeetCode:各种买卖股与状态机
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/yi-ge-tong-yong-fang-fa-tuan-mie-6-dao-gu-piao-wen/
2020-07-13 11:09:08
169
原创 322. 零钱兑换
思路典型的背包问题设d[i][j]表示使用第i个硬币,达到面额j的最小数量d[i][j] = min(d[i][j-coins[i]]+1,min(d[i-1][j-k*coin[i]]+k)),其中右边第一项表示与使用了第i个硬币,第二项表示没有使用第i个硬币中最小个数的那个。class Solution { public int coinChange(int[] coins, int amount) { // Arrays.sort(coins);
2020-07-10 11:19:44
93
原创 数组中的第K个最大元素
前言这个题很经典,可以对快速排序或者堆排序进行改装,就可以以O(n)的平均时间复杂度解决思路1) 快速排序快速排序的核心思想:以数组最后一个数作为标杆,所有比其小的数移动至其右边,比其大的数移动至左边,核心代码如下:public int partition(int[] nums,int l,int r){ int x = nums[r]; int i = l-1; //(nums); for(int j = l;j<=r;j++
2020-07-02 09:26:45
146
原创 394. 字符串解码
思路思路一:使用栈这种括号或者括号套括号的模式非常适合用栈来解决,设定一个辅助栈,当遇到’[‘的时候,开始将所有东西推到栈中,直到遇到’]‘时,开始取栈中的东西。取得方法:先取字符,再取数字,计算得到到的东西再压入栈中直到所有’]'都遍历完为止思路二:递归...
2020-06-30 08:42:10
3279
原创 239. 滑动窗口最大值
思路维护一个n双端tan队列,使得每次更新,双端队列的First值都是最大值,具体做法:1、 先将前k个值压入双端队列,在压入的过程中,若正在压入的值大于队尾的值,剔除队尾的值,直到队列为空或者队尾的值大于等于当前的值。2、每次滑动的时候,如果窗口左边要抛弃的值正好为前一次队列的最大值,将队列的该值弹出对头,让后让窗口右边即将加入的值按照1,的方式塞入代码class Solution { public int[] maxSlidingWindow(int[] nums, int k) {
2020-06-28 09:43:51
94
原创 对动态代理的理解
JDK动态代理的作用jdk中的动态代理是面向接口的,也就是说被代理的对象至少有一个接口,其作用十分的强大,经其代理生成的对象,其每一个接口实现方法都无法逃离invoke这个方法。invoke会动态的根据其调用的方法,对该方法进行某种增强、处理或监管。也就是说,即便这个对象本身也只是个接口,其所有方法都可以在invoke中实现,invoke函数只需要根据方法的名称来确定增强、监管或实现的手段。动态代理的入口参数 Proxy.newProxyInstance方法的参数: * Class
2020-06-25 18:49:56
216
原创 23. 合并K个排序链表
思路使用一个小顶堆,堆内的元素为链表,并按照堆的第一个元素进行排序。java中优先队列的排序:以小顶堆为例Queue<ListNode> q = new PriorityQueue<>( (ListNode l1,ListNode l2)->{ //升序排列 return l1.val-l2.val; } );每次取堆顶链表的第一个元素,
2020-06-25 14:24:49
116
原创 5. 最长回文子串
题目分析回文串的特性:两侧对称相等,允许最中间不满足思路:动态规划。 d[i]表示字符串s第i个字符为结尾最大回文串,d[i]与d[i-1]有关系,其具体关系为:d[i]<=d[i-1]+1,如果d[i-1]对应的字符串远离d[i]的一侧与s[i]不相同,则只能在d[i-1]字符串内找起始点,如果满足起始点和终点相同,判断是否为回文串。class Solution { public String longestPalindrome(String s) { Strin
2020-06-25 13:08:45
125
原创 2. 两数相加
题目分析两个链表进行同时遍历的时候,要注意在遍历的过程中都不能为空,否则会出错,当一个链表遍历完成的时候,另一个可能没有遍历完成,要继续遍历。在生成结果链表的时候,最好使用一个哑结点当作头,这样可以省去复杂的条件判断。在进行加法操作的时候注意进位。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(in
2020-06-24 11:18:09
110
原创 3. 无重复字符的最长子串
题目分析方法一:动态规划求数组的连续字串相关,第一反应应该是动态规划,其中状态d[i]表示以第i个字符为结尾,无重复字符串的最长字串,状态转移方程:d[i] = (s[i]是否与d[i-1]中的字符重复?找到重复的位置,d[i]等于两者相减:d[i-1]+1)问题一:如何判断是否重复?使用map或set问题二:如何找到重复的位置?使用map,其key = 字符,其value=位置。问题三:需要每个d[i]都配一个map吗?并不需要,一次遍历,判断d[i-1]的长度时候落在了当前重复字的区间
2020-06-24 10:44:09
105
原创 Spring+dbutils简单案例
Maven配置文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.o
2020-06-23 22:16:58
194
原创 146. LRU缓存机制
题目分析添加链接描述有get和put,这是一个键值操作,第一反应是使用map,但是题目有限定条件:首先键值对的大小是有限的,当put键值对的数量超过最大长度时,需要舍弃一些键值对,即那些不常用的键值对。何为不常用的键值对?题目给出的描述为最近最少使用的键值对是不常用键值对,也就是说最近进行put,get操作的键值最不会被淘汰,这样就产生了一个类似队列或者链表的模型:1)每次进行put操作时,如果该值存在于队列之中,就将其拿出并压入队首,如果不存在,则淘汰队尾元素,将该元素插入队头2)每次进行ge
2020-06-23 15:52:45
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人