- 博客(80)
- 收藏
- 关注
原创 个人博客网站 https://gaoyi-ai.gitee.io/archives/
博客迁移现在博客都更新在gitee上,地址:https://gaoyi-ai.gitee.io/note-site
2020-12-18 20:46:39
2107
2
原创 HashMap - 哈希表
文章目录TreeMap分析HashMaphashLong和Double的哈希值字符串的哈希值关于31的探讨扰动计算自定义对象作为keyHash CollisionJDK1.8的哈希冲突解决方案putcontainsKeycontainsValue扩容TreeMap分析内部通过红黑树实现节点存储Entity映射◼ 时间复杂度(平均)添加、删除、搜索:O(logn)◼ 特点Key 必须具备可比较性元素的分布是有顺序的◼ 在实际应用中,很多时候的需求Map 中存储的元素不需要讲究顺序
2020-07-16 20:55:56
335
原创 Assembly-Lab 9
文章目录实验要求code实验要求codeassume cs:code,ds:data,ss:stackdata segment str db 'welcome to masm!' c db 2,24h,71hdata endsstack segment db 16 dup (0)stack endscode segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,16 mov a
2020-07-14 16:57:11
266
原创 Assembly-Lab 8
文章目录实验8实验分析汇编编译器(masm.exe)对jmp的相关处理实验8分析下面程序,这个程序可以正确返回吗?assume cs:codesgcodesg segment mov ax,4c00h int 21hstart: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0: jmp s
2020-07-14 12:43:24
226
原创 DNA.动态规划
文章目录dp.DNAdp.DNADNA can be modeled as a string consisting of letters A,T,G and C, denoting the four different nitrogen bases. To measure genetic similarity, we want to identify non-overlapping substrings that match given non-empty sequences, each of which
2020-07-06 08:54:39
288
原创 collapse.动态规划
题目分析from building import *def max_food(building: Building) -> int: """returns the maximum number of food that can be collected from given building""" length = 2 * building.size + 1 dp = [[0 for i in range(length)] for j in range(length
2020-06-02 08:55:38
385
原创 OSPF与RIP协议对比
文章目录OSPF路由规划拓扑OSPF与RIP协议对比OSPF路由规划拓扑OSPF与RIP协议对比显然,根据RIP协议,10.0.0.1 向 40.0.0.1 发送ICMP请求会选择 10.0.0.0 -> 192.168.0.0 -> 40.0.0.0 路径(依据跳步数最少)然而,根据OSPF协议,依据路径向量选择会决策代价(cost)Cisco路由器判断代价为 100M带宽/链路带宽(小于1则取1)选择 10.0.0.0 -> 20.0.0.0 -> 30.0.
2020-05-21 21:12:12
1326
原创 0-1背包
文章目录题目分析Solution - 二维数组Solution - 一维数组变式题 - 恰好装满Solution题目分析假设dp(i,j)是最大承重为j、有前i件物品可选时的最大总价值,i∈[1,n],j∈[1,W]dp(i,0)、dp(0,j)初始值均为0如果j< weights[i-1],那么dp(i,j)=dp(i-1,j)如果j≥ weights[i-1],那么dp(i...
2020-05-20 19:03:40
165
原创 42.接雨水
42.接雨水文章目录题目分析Solution题目分析Solution /** * 空间复杂度O(1),时间复杂度O(n) */ public int trap(int[] height) { if (height == null || height.length == 0) return 0; int lastIdx = height.length - 2; // 遍历每一根柱子,看看每一根柱子上能放多少水
2020-05-14 17:21:25
144
原创 11.盛最多水的容器
11.盛最多水的容器文章目录题目分析Solution题目分析暴力法:枚举可能的两个柱子,但是会有较多的无效计算优化Solution public int maxArea(int[] height) { if (height == null || height.length == 0) return 0; int l = 0, r = height.length - 1, water = 0; while (l < r) {
2020-05-14 16:21:26
107
原创 253.会议室II
253.会议室II文章目录题目分析Solution - 最小堆Solution - 分开排序题目分析按照常识,要根据开始时间来排序,先开的排在前面前面有会议开完,则可以利用该会议室;否则,要新开一间会议室Solution - 最小堆最小堆,取最小值:O(1);插入,删除:O(logn)堆顶:最早开的会的结束时间,这样要开的会的开始时间和最早结束的会议的结束时间比较最后堆中,剩下的元素个数为所需要的会议室,即没有在要开的会了public int minMeetingRooms(in
2020-05-13 22:36:12
337
原创 7.整数反转
7.整数反转文章目录题目分析Solution题目分析假设最大值就为2789,那它反转之后为9872,一定会溢出b = a * 10 + x % 10 ; (b - x % 10) / 10 = a,反推a,能相等说明没有溢出,因为溢出数字就一定会变得不同Solution public int reverse1(int x) { long res = 0; while (x != 0) { res = res * 10 + x %
2020-05-13 22:16:01
87
原创 146.LRU缓存机制
146.LRU缓存机制文章目录题目分析Solution题目分析LRU是操作系统常用的一种页面置换算法,选择最近最久未使用的页面予以淘汰虚拟头尾节点哈希表+双向链表Solutionpublic class LRUCache { private Map<Integer, Node> map; private int capacity; // 虚拟头结点 private Node first; // 虚拟尾结点 private Nod
2020-05-13 22:03:17
163
原创 54.螺旋矩阵
54.螺旋矩阵文章目录题目分析Solution题目分析先加最外一圈,一层一层向内,利用四个指针来确定处在哪一圈矩阵分为偶数行和奇数行两种情况奇数行、偶数列的时候有问题,当添加完left top -> right top,top++之后,top越过bottom但是第二步right top -> right bottom不会执行,right–但是第三步right bottom -> left bottom会在执行一次,所以要breakSolution publi
2020-05-13 21:44:31
206
原创 面试题.62.圆圈中最后剩下的数字
面试题.62.圆圈中最后剩下的数字文章目录题目分析Solution题目分析约瑟夫环问题f(n, m) = (f(n – 1, m) + m) % n如果编号从1开始,即结果+1,向后一个Solution public int lastRemaining1(int n, int m) { return (n == 1) ? 0 : (lastRemaining1(n - 1, m) + m) % n; } // f(1, 3) = 0 //
2020-05-13 21:24:56
123
原创 50.Pow
50.Pow文章目录Solution - 递归Solution - 非递归变式题 - 快速幂的模Solution - 递归这里注意-1右移,-1 = 1111 1111,右移仍然是 1111 1111 = -1320 = 310 * 310 ; 321 = 310 * 310 * 33-20 = 3-10 * 3-10 ; 3-20 = 3-11 * 3-11 * 3 负奇数,右移相当于绝对值向上取整, 指数 -7 >> 1 == -4 * -4 * 4 // T(n) =
2020-05-13 21:14:11
105
原创 15.三数之和
15.三数之和文章目录题目分析Solution题目分析去重:由于是经过排序的,那么相等的一定是挨在一起的,2位置的-1,他只向他后面找能组合成功的数,但是1位置的-1已经找过了,并且1位置,他找的范围还要更大,也就是2位置时其实是可以跳过的l,r 如果扫描到和前一次的元素相等,即重复情况就要跳过Solution public List<List<Integer>> threeSum(int[] nums) { if (nums == null
2020-05-13 18:30:20
115
原创 1.两数之和
1.两数之和文章目录题目分析Solution题目分析暴力法枚举每一对相加之和,时间复杂度:O(n2)要求O(n),即扫描到一个就能花O(1)时间找到另一个加数,即用哈希表HashMap的key为数,value为下标,如果找到即返回,找不到,就把自己加进去作为另一个加数Solution public int[] twoSum(int[] nums, int target) { if (nums == null) return null; // 用来存放
2020-05-13 18:06:10
118
原创 283.移动零
283.移动零文章目录题目分析Solution题目分析不能考虑遇到0直接和数组末尾交换,这样会破环相对顺序反过来想,把0移动到数组末 == 把非0移动到前面一趟扫描,遇到0就跳过,遇到非0就把它挪到前面去cur记录着可以挪动到的位置注意当nums[i] != 0,且cur和i指向同位置,即非0数看作已经放好位置了Solution public void moveZeroes(int[] nums) { if (nums == null) return;
2020-05-13 17:56:30
104
原创 39.组合总和
39.组合总和文章目录题目分析Solution题目分析排序可以保证选择的数字,当超过remain时,一定凑不出,可以提前结束dfs的退出条件显然为凑过targetSolutionclass Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { if (candidates == null || candidates.length
2020-05-08 22:29:07
119
原创 113.路径总和Ⅱ
113.路径总和Ⅱ文章目录题目分析Solution题目分析此题dfs终止的条件是,到达叶子节点,但是找到节点的条件还要是remain为0Solutionclass Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> list = new ArrayList<>();
2020-05-08 22:05:44
105
原创 22.括号生成
22.括号生成文章目录题目分析Solution题目分析这个题就不是直接明显的告诉层数,那么一定有2n个括号可以选择比较特殊的是 ‘(’,一开始只能选择 ’(‘ ,并且此时’(‘可选的数量和’)'数量相同如下图,此时剩余’(‘可选的数量和’)‘数量都为1,只可选择’(’为了记录剩余’(‘和’)'的数量,每次都要判断leftRemain和rightRemain由于加入的’(‘还是’)'是有条件的,那么就不好用for循环,对左右括号分别判断即可Solutionpublic List<
2020-05-08 21:49:43
105
原创 47.全排列Ⅱ
47.全排列Ⅱ文章目录题目分析Solution题目分析首先这个题和46.全排列不同于给的nums可能会有重复数字,这就导致产生的全排列会相同比如[1,1,2]和 [1,3,2]这样1会替换3,导致出现相同的去重:第0层的第2,4,5其实是一样的,虽然后面不一样,但是最终全排列,后面的出现的情况最终还是一样1位置和3,4位置交换时,由于前面已经和1交换过了,那么就会重复Solution public List<List<Integer>> permuteU
2020-05-08 21:34:36
123
原创 46.全排列
46.全排列文章目录题目分析SolutionSolution 2题目分析dfs 需要一层一层地来,画一个竖的表格记录每一层干什么;记录结束时的条件注意用过的就不能再选了,所以要记录每次要添加的列表,判断如果要加入的元素已经在其中,就直接跳过当添加完一种情况后,注意把记录使用过的,在标记为没用过Solution private List<List<Integer>> list; private int[] nums; /** 用来保存每一
2020-05-08 19:04:52
111
原创 242.有效的字母异位词
242.有效的字母异位词文章目录题目分析Solution题目分析使用HashMap有点过于庞大,由于都是英文小写字母,所以直接开个数组就行也可对s和t排序Solutionpublic boolean isAnagram(String s, String t) { if (s == null || t == null) return false; char[] sch...
2020-05-07 18:35:12
105
原创 572.另一个树的子树
572.另一个树的子树文章目录题目分析Solution题目分析一般做法,对二叉树进行遍历,比如先序遍历,如果找到一样的根节点,那么就去找它的左子树和右子树是否相同这里使用了二叉树的序列化,利用字符串进行解决其实使用了contains为什么要把空结点也表示?不表示空节点会导致有无数个二叉树附:前序遍历踩坑(12!#!#!) contains (2!#!#!)只要再加上...
2020-05-07 18:29:19
112
原创 面试题01.09.字符串轮转
面试题01.09.字符串轮转文章目录题目分析Solution题目分析这道题还挺有意思的首先,旋转字符串的特点是,某些字符从后面跑到了前面,这就好像由一队变两队,队尾变成了队头Solutionpublic static boolean isRevolving(String s1, String s2) { if (s1 == null || s2 == null) re...
2020-05-07 18:12:56
266
原创 最长公共子串
文章目录题目分析Solution - 二维数组Solution - 一维数组题目分析假设2个字符串分别是str1、str2i∈[1,str1.length]j∈[1,str2.length]假设dp(i,j)是以str1[i-1]、str2[j-1]结尾的最长公共子串长度dp(i,0)、dp(0,j)初始值均为0如果str1[i-1]=str2[j-1],那么dp(i,j)=dp...
2020-05-07 10:25:49
1443
原创 739.每日温度
739.每日温度文章目录题目分析Solution递减栈dp题目分析相当于寻找右边第一个比它大的位置,维持一个递减栈,存放索引输出链表中有几个位置的值已经知道:最右边第一个一定为0,从这就可以看出类似dp,因为温度不会再变化所以可以直接从倒数第二个开始,记录当前和它的右边当前温度<右边温度天数=索引位置的差值当前 = 右边 (把当前看成右边位置处...
2020-05-05 15:46:24
155
原创 654.最大二叉树及变式
654.最大二叉树文章目录题目分析Solution变式题题目分析Solution题目分析很容易想到首先比较找出最大值作为根节点,递归找出根节点的左子树的根节点和右子树的根节点Solution public TreeNode constructMaximumBinaryTree(int[] nums) { if (nums == null) return null; ...
2020-05-05 15:44:39
110
原创 155.最小栈
155.最小栈文章目录题目分析Solution - minStackSolution - LinkedList题目分析如何能实现O(1)的返回最小值:维护一个存放最小值的栈minStack,每次push时,就比较栈顶,把较小的再push到最小栈中,这样stack中每一个元素都对应着以它为栈顶时的一个最小值Solution - minStackpublic class MinStac...
2020-05-04 22:54:47
105
原创 234.回文链表
234.回文链表文章目录题目分析Solution题目分析中间节点:利用快慢指针,快指针每次走两步,慢指针每次走一步,当发现快指针的next或者next.next为空,意味着快指针已经走完链表,那么满指针正好位于中间位置反转链表:熟记!!!整体流程:走到中间结点:反转右边的链表分别从左边头结点和右边头结点开始,判断是否相等,当右边指向null时,中间结点要么被比较为相等,要么为奇...
2020-05-04 22:32:24
114
1
原创 239.滑动窗口最大值
239.滑动窗口最大值文章目录题目分析双端队列最大索引Solution - DequeSolution - maxIndex题目分析暴力法的时间复杂度为 O(n*k),弊端为每次扫描窗口的最大值,每两次扫描之间都会存在重复的值比较,已经知道了他们的最大值是谁了,所以要减少比较次数双端队列为什么要使用双端队列(单调队列)队列里要是滑动窗口范围的,当队列里的索引不再滑动窗口大的范围,...
2020-05-04 12:13:33
284
原创 86.分割链表
86.分割链表文章目录题目分析Solution题目分析把它分割成两个单独链表,最后再串起来如果说分割成三部分小于、相等、大于,也是相同思路特殊情况分析:Solutionpublic ListNode partition(ListNode head, int x) { if (head == null) return null; ListNode lHead = new ...
2020-05-03 21:48:36
95
原创 160.相交链表
160.相交链表文章目录题目分析Solution题目分析当两个链表长度相等时,比较到相同的对象时,即交叉点要满足所有情况下长度都相等,需要互相拼接,才会长度一定相等Solution public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB =...
2020-05-03 21:28:07
109
原创 203.移除链表元素
203.移除链表元素文章目录题目分析Solution题目分析 把它想像成构建一个全新的链表,不等于val的,即是属于全新链表的结点 构造虚拟头节点Solution public ListNode removeElements(ListNode head, int val) { if (head == null) return null; // 新链表的头结点 ListN...
2020-05-03 20:50:39
86
原创 面试题16.部分排序
寻找未排序的部分 == 寻找逆序对,且最远的逆序对最右边位置:最右逆序对的位置最左边位置:从右往左的逆序对左 --> 右扫描过的最大值是:8如果发现当前值小于最大值,记录它的位置(2)右 --> 左扫描过的最小值是:1如果发现当前值大于最小值,记录它的位置(5)并且当 r == -1 时,即说明没有逆序对,直接返回 [-1,-1]...
2020-05-01 21:25:49
175
原创 面试题47.礼物的最大价值
面试题47.礼物的最大价值文章目录题目分析solution题目分析 由于只能向右向下,则可以初始化第一行和第一列为对应的累加和 题解对应着走到右下角的价值solution public int maxValue(int[][] grid) { int rows = grid.length; int cols = grid[0].length; ...
2020-05-01 21:19:26
190
原创 5.最长回文子串(四种方法)
文章目录Solution 1 - 动态规划Solution 2 - 中心扩展Solution 3 - 中心扩展优化Solution 4 - ManacherSolution 1 - 动态规划dp[i][j]表示为s[i,j]是否为回文串;注意单字符一定为回文串,那么dp表格的对角线就可以预先填上当s长度小于等于2时,s是否为回文串,只需要判断s[i]和s[j]是否相等当s长度大于2时,...
2020-05-01 21:06:29
8373
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人