随笔分类 - 算法
摘要:背景 最开始刷题的时候,总想着写一个大的辅助数组,用来对每一个元素进行计数,但是考虑到元素空间,肯定是不可行的 但是,对于一些有限个元的元素,比如short型,char型,Byte型,这些类型的元素空间都有限,因此就可以考虑使用一个辅助数组来计数 具体问题1: 在看sort源码时,以为底层就是使用的
阅读全文
摘要:###背景 在访问元素的时候,经常会用到一个辅助数组visit[nums.length]来记录元素的访问状态 特别是在图,树的深度遍历,要记录元素是否已经访问过了 在答案树的回溯过程中,经常需要剪枝来删除一些答案,比如要求是不重复的元素 ###问题 那么使用visit数组,会开辟额外的空间 ###解
阅读全文
摘要:#题目 链接:https://leetcode-cn.com/problems/generate-parentheses 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(()
阅读全文
摘要:#题目 链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示
阅读全文
摘要:#题目: 链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注
阅读全文
摘要:##题目来源 https://leetcode-cn.com/problems/container-with-most-water/ 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它
阅读全文
摘要:###记录了啥 动态规划中 在拿到迭代公式之后(也就是知道了如何利用已知部分的信息求未知部分的信息之后) 怎么写循环(怎么循环,好在里面写迭代公式) ###题目 最优除法https://leetcode-cn.com/problems/optimal-division/ 简单说:一个数组全是正整数,
阅读全文
摘要:问题就是一个数组,代表每天的股票价格,买了再卖找到最大的利润值 1.只许买卖一次 ###动态规划or最小前缀值 public int maximumDifference(int[] nums) { if (nums.length==0||nums==null)return -1; int res=-
阅读全文
摘要:单向遍历常用双层for(i++或者i--) 需要往返的遍历数组的时候 可以采用两种方式: 1.俩for循环,用if+flag判断使用哪个 例如: boolean flag=true;//正向 while(true){ if(flag){ for(int i=0;i<len;i++){ ......
阅读全文
摘要:在同时遍历两条链的时候,由于链表的长度不一,可能造成一条链先遍历完成,另一条长链单独处理的情况 如: 合并有序链表 但是有些情况下,在短链遍历完成之后,可以继续假设短链的数据,使得操作统一 比如:链表加法 2. 两数相加 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的
阅读全文
摘要:1. 问题: 在最短路径问题中,如果源点有多个,我之前的做法可能都是遍历这n个源点 2. 背景题目 leetcode题目:大致意思如下 给定一个 01 矩阵 mat,输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 (斜对角的距离是2) (简单理解就是地图上陆地
阅读全文
摘要:之前一般遇到题目考虑使用图遍历的时候,基本上来就深度优先的递归调用,但是忘记了还有BFS方式 二叉树的按层遍历属于啥呢,就属于广度优先,使用了啥呢,使用了队列 所以可以把当前遍历到的节点的所有下一跳都存到队列里,然后队列的头肯定是这个节点都同级节点,弹出来继续遍历就行了 Queue<Node> qu
阅读全文
摘要:对于知道长度的单链表,找中间节点的方法比较简单 可以使用双指针,一个指针先出发,遍历一半节点之后,另一个指针再出发,这样后指针遍历到尾时,前指针正好在中间 但是对于未知长度的单链表,一般采用先遍历一遍链表求长度,在从头循环len/2 次遍历到中间节点 改进: 使用快慢指针,一个指针每次前进两步,一个
阅读全文
摘要:#题目 一个整数数组nums,找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 例如: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 // [4,-1,2,1] ##方法一:暴力破解 可以考虑暴力破解,为了正向遍历,考虑结尾情况:比如计算以每一
阅读全文
摘要:现在不要看,因为是一边学一边整理更改的,现在还有很多描述不准不正确的地方!! 想写点自己关于动态规划的理解(Dynamic Programming) 不如管他叫动态决策。。好理解 ##1适用范围 只返回最优结果,而不返回最优路径的时候 ##2区别于分治 分治是1+1+1+1=4 而动态规划是1+1=
阅读全文
摘要:###记录原因: 刷题时发现一道二分法题怎么写都超时 老天,我从开始学编程就没注意过这事啊,mid一直是用 (b+e)/2表示啊 甚至一度怀疑二分法写错了,或者根本不是用二分法做的 然后我看了正确答案 int mid=b+(e-b)/2; 将道理我好歹还比这个少一次加减法运算吧 ###超时的用例 索
阅读全文