
学习笔记
文章平均质量分 82
三日看尽长安花
(1) Your interest in the technology
(2) Your ability to innovate
(3) How well you think creatively
(4) How you adapt to changing requirements
(5) Your problem-solving approach
(6) Your analytical thinking skills
(7) How you handle feedback
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
frp配置后台运行
nohup:简单的方法,适合直接在后台运行进程。screen或tmux:允许你在会话中启动程序,然后断开会话,让进程继续运行。systemd:适合长期运行的服务,确保系统重启后自动启动。pm2:适合管理和监控后台进程,尤其是在 Node.js 环境中。你可以根据自己的需求选择合适的方法来确保frp在终端关闭后仍然能够持续运行。原创 2024-11-25 11:45:56 · 1803 阅读 · 0 评论 -
LRU缓存机制
问题: 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少...原创 2020-02-28 17:29:45 · 173 阅读 · 0 评论 -
字符串相乘(大数相乘)
问题: 给出两个字符串表示的正整数,求其乘积,返回其乘积的字符串表示。思路: 用一个数组存储乘积,第i位与第j位的乘积累积保存到数组的第i+j+1位,后对数组每一位做进位操作。java代码:public String multiply(String num1,String num2){ int len1=num1.length(),len2=num2.length(); ...原创 2020-02-27 23:21:12 · 354 阅读 · 0 评论 -
产生括号
问题: 打印出所有N对合理的括号组合。思路: 用递归函数生成括号组合,参数为左右括号余量和当前位置,以及已生成的组合。结束条件为余量为0,否则余量减一继续调用。java代码: public void printPar(int N){ char[] str=new char[2*N]; printPar(N,N,str,0); } private...原创 2020-02-27 21:48:56 · 150 阅读 · 0 评论 -
平衡二叉树
问题: 给出一棵二叉树,判断其是否为平衡二叉树。思路: 首先,平衡二叉树的定义:平衡二叉树要么是一棵空树,要么是具有以下性质的二叉树–它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差的绝对值不超过1。 递归处理左右子树,根据左右子树的结果返回树的高度。java代码:public boolean isBalanced(TreeNode root){ return (...原创 2020-02-27 21:15:07 · 136 阅读 · 0 评论 -
路径和 I
问题: 给定一棵二叉树和一个值,判断是否存在从根到叶子节点的路径和等于给定的值。思路: 采用递归的方式,如果当前为非叶子节点,递归处理其子节点,传递目标值减去当前节点的值,如果是叶子节点,比较当前值和目标值,如果为空,返回False。java代码:public boolean hasPathSum(TreeNode root,int sum){ if(root==null)...原创 2020-02-27 20:15:51 · 121 阅读 · 0 评论 -
最小公共祖先 IV
题目: 给定两个节点,求它们在一个普通树中的最小公共祖先。思路: 采用广度优先遍历找到节点,将所有节点父节点存入哈希表,当找到节点时回溯哈希表实现到树根的路径。找两条路径的交点。java代码:class TreeNode{ int val; ArrayList<TreeNode> children; } TreeNode LCA4(...原创 2020-02-27 19:51:40 · 206 阅读 · 0 评论 -
最小公共祖先 III
问题: 给定两个子节点,求在二叉树中的最小公共祖先。思路: 最小公共祖先有两种情况:1)两个节点为祖子关系;2)两个节点分别在最小公共祖先两侧;考虑这样一种遍历方式,先处理当前节点,若为两节点之一则返回,然后分别递归调用处理左右节点,再结合左右子树的处理结果返回最终结果。TreeNode LCA3(TreeNode root,TreeNode p,TreeNode q){ i...原创 2020-02-27 18:34:22 · 303 阅读 · 0 评论 -
最小公共祖先 I
问题: 给定个两个节点,求它们在一棵二叉搜索树中的最小公共祖先。思路: 从根节点开始,找到第一个值在两节点之间的节点,即为最小公共祖先。java代码:TreeNode LCA(TreeNode root,TreeNode p,TreeNode q){ if(root==null||p==null||q==null) return null; ...原创 2020-02-27 17:57:08 · 837 阅读 · 0 评论 -
纵横字谜的答案(Crossword Answers,UVa232)
Sample Input2 2ATO6 7AIMDENMEONEUPONTOSOERINSAOR*IES*DEA0Sample Outputpuzzle #1:Across1.AT3.ODown1.A2.TOpuzzle #2:Across1.AIM4.DEN7.ME8.ONE9.UPON11.TO12.SO13.ERIN15.SA17...原创 2020-02-15 23:09:38 · 261 阅读 · 0 评论 -
螺旋矩阵
问题: 给定一个m*n矩阵,按螺旋顺序返回所有元素。思路: 按从左到右、从上到下、从右到左和从下到上四个方向构建循环,设置四个移动边界。java代码:int[] searchRange(int A[],int target){ int[] range=[-1,-1]; int lower=0,upper=A.length,mid; if(A[u...原创 2020-02-14 20:57:59 · 134 阅读 · 0 评论 -
区间搜索
问题: 给定一个有序数组(该数组元素可能含有相同值)和一个目标值,找出目标值的起止下标,如果数组不含邮该目标值,则返回【-1,-1】。要求时间复杂度为O(log(n)),n为数组长度。思路: 二分查找,分别找到目标值的上下边界。java代码:int[] searchRange(int A[],int target){ int[] range=[-1,-1]; ...原创 2020-02-14 18:35:28 · 381 阅读 · 1 评论 -
首个正数
问题: 给定一个无序整型数组,找出第一个不再数组里的正整数。要求时间复杂度O(n),空间复杂度为O(1)。思路: 将数组转变成哈希表,将等于i的值放在下标为i-1处。最后遍历数组,i处的值若不为i+1,则输出整数i+1。java代码:int firstMissingPositive(int A[]){ int n=A.length; for(int i=0;i...原创 2020-02-14 18:11:34 · 149 阅读 · 0 评论 -
链表分区
问题: 给定一个链表和一个值x,把链表一分为二,即将小于x的所有节点放在大于或等于x的节点前,并保存节点的原有相对顺序。思路: 使用一个指针指向分界点,遍历链表,遇到小于x的节点插入到分界点。java代码:ListNode partitionLinkedList(ListNode head,int x){ ListNode curr=head; ListNod...原创 2020-02-13 20:51:14 · 751 阅读 · 0 评论 -
两数相加
问题: 给出两个正整数,每个整数由一个链表表示。其中链表的每个节点保存数的数位,这些数位反序存在在链表中,即高位在尾部,低位在头部。返回一个链表代表这两个数之和。java代码:public ListNode addTwoNumbers(ListNode l1,ListNode l2){ ListNode iter1=l1,iter2=l1; ListNode i...原创 2020-02-13 19:55:37 · 110 阅读 · 0 评论 -
分组反转链表
问题: 反转一个链表中的每K个节点,如果链表长度不能被K整除,则最后余数节点保持不变。思路: 分组,对每个分组进行链表转置。关键设计转置函数,对组内元素迭代反转。java代码:ListNode reverseKGroup(ListNode head,int k){ if(head==null||k<=1) return head; ...原创 2020-02-13 19:51:57 · 526 阅读 · 0 评论 -
反转链表
问题: 分别用递归和非递归方式来实现反转链表。思路1: 递归。java代码:ListNode reverseList(ListNode head,ListNode newHead){ if(head==null||head.next==null){ newHead=head; return head; } ...原创 2020-02-12 18:34:27 · 116 阅读 · 0 评论 -
环的长度
问题: 给出一个单向链表的头指针,如果有环,则返回环的长度,否则返回0。思路: 使用两个指针,移动速度一快一慢,若快指针先达到尾部,则无环,若快指针追上慢指针,则快指针多走一个环的长度。java代码: int getCircleLength(ListNode head){ ListNode slow=head; if(slow==null||slow.next...原创 2020-02-12 17:30:27 · 393 阅读 · 0 评论 -
合并链表
问题: 合并两个有序链表,返回合并后的有序链表头。不允许利用额外的线性存储空间。思路: 申请一个新节点,比较两链表表头,将两链表串在新节点后。java代码:ListNode mergeTwoList(ListNode l1,ListNode l2){ ListNode dummy=new ListNode(0); ListNode cur=dummy; ...原创 2020-02-12 16:54:33 · 127 阅读 · 0 评论 -
Top K II
问题: 给定一维整型数组和一个整数K,找出和不小于K的数目最少的子数组。思路: 改进快排分区思路(见Top K)。对数组进行降序排列,分区同时计算左边数之和...原创 2020-02-12 16:22:03 · 143 阅读 · 0 评论 -
Top K
问题: 求一维数组中的最小的k个数。思路1: 排序。把数组从小到大排序,取前k个数。若数组过大,机器内存无法同时容纳整个数组,则需要使用外部排序。思路2: 堆。创建一个最小堆,初始化大小为k;堆顶为堆的最大元素。扫描一遍数组得到k个最小元素。思路3: 快排分区。对数组调用分区函数,如果返回的下标是k-1,那么数组左边的k个数就是结果。思路3 java代码:int partition(in...原创 2020-02-10 22:20:45 · 125 阅读 · 0 评论 -
产生随机数
问题: 给出一个整型数组,以及数组的最大值max和最小值min,写一个函数产生一个在【min,max】范围内的随机数,该随机数并不在数组里。假设总能找到该随机数。思路: 产生随机数,对数组排序,二分查找。java代码:void numInRange(int[] intList,int min,int max){ Arrays.sort(intList); in...原创 2020-02-10 21:05:56 · 169 阅读 · 0 评论 -
数位重组
问题: 给定两个数组表示的整数,比如x=1234={1,2,3,4},y=2410={2,4,1,0},返回第一个整数的重组后的值最接近第二个整数,并且大于第二个整数。假设两个整数的数组大小相同,并且肯定能找出符合条件的数。思路: 先对x进行排序,从x中挑出一个与y对应的相等或更大的数字,如果挑出相等的放入结果集,继续上述操作,直到找到一个更大的数字。后面的数位递增放入。int[] getCl...原创 2020-02-10 20:38:28 · 800 阅读 · 0 评论 -
数组配对
问题: 给定N个整数,N为偶数,是否能找到N/2对,使得每对和能被K整除。注意:每个元素只能出现在一个配对中。思路: 创建一个长度为K的数组,将整数的个数按照余数分类存储到数组中,分析余数情况。boolean checkPairable(int[] nums,int k){ if(k<0) return false; int[] c...原创 2020-02-10 19:58:20 · 577 阅读 · 0 评论 -
合并区间
问题: 给定一个区间集合,合并里面重叠当区间,并返回新的不含重叠区间当集合。例如,输入:【1,5】,【6,10】,【4,6】,【15,20】。输出:【1,10】,【15,20】。思路: 先对区间集合排序,申请一块结果集空间,扫描原始集合,一个一个放入结果集,若即将放入的区间与结果集尾部区间重叠,则两两合并再放入,若不重叠,则直接放入。java代码:ArrayList<Interval&...原创 2020-02-09 22:44:26 · 144 阅读 · 0 评论 -
最大重叠区间个数
问题: 给定多个可能重叠的区间,找出重叠区间的个数的最大值。区间定义如下:public class Interval{ int start; //起点 int end; //止点 Interval(int a,int b){ start=a; end=b; }}思路: 将区间边界转换成点,对所有点进行排序,扫描排序结果。当遇到...原创 2020-02-09 22:35:30 · 6305 阅读 · 3 评论 -
最大下标距离
问题: 给定一个整型数组,找出最大下标距离j-i, 当且仅当A[i]<A[j]和i<j。思路: 记录从第一个元素开始的下降序列,因为A[i]一定会出现在其中,然后从尾部开始扫描,i从下降序列开始扫描,j从数组尾部开始扫描,记录符合条件A[i]<A[j]的距离最大值。java代码:int maxIndexDistance(int A[]){ if(A==nul...原创 2020-02-09 22:25:06 · 423 阅读 · 0 评论