首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
课程
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
LifelongCode
获赞
2596
粉丝
816
关注
29
看过 TA
1290
男
西北工业大学
2022
后端
IP属地:广东
微信公众号【LifelongCode】
私信
关注
拉黑
举报
举报
确定要拉黑LifelongCode吗?
发布(174)
刷题
LifelongCode
2021-06-02 18:52
后端
NC94:设计LFU缓存结构
LFU算法:least frequently used,最近最不经常使用算法; 如果一个数据在最近一段时间很少被访问到,那么可以认为在将来它被访问的可能性也很小。因此,当空间满时,最小频率访问的数据最先被淘汰。 set(key,value):将记录(key,value)插入该结构。当缓存满时,将访问频率最低的数据置换掉。 get(key):返回key对应的value值。 一般会维护两个数据结构: 哈希:用来提供对外部的访问,查询效率更高; 双向链表或队列:维护了对元素访问次数的排序 缓存操作导致的链表变化: 添加新元素:新元素访问次数为1,放到队尾; 缓存淘汰:从队尾开始淘汰,因为队...
名企高频面试算法题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-28 15:32
后端
JZ67:剪绳子
解法1:动态规划 当n=1时,最大乘积只能为0; 当n=2时,最大乘积只能为1; 当n=3时,最大乘积只能为2; 当n=4时,可以分为如下几种情况:1111,121,13,2*2,最大乘积为4; 往下推时,发现n≥4时,可以把问题变成几个小问题,即:如果把长度n绳子的最大乘积记为f(n),则有:f(n)=max(f(i)*f(n-1)),0<i<n。所以思路就很容易出来了:从下往上推,先算小的问题,再算大的问题,大的问题通过寻找小问题的最优组合得到。 其实这就是动态规划法,以下是动态规划法的几个特点: 求一个问题的最优解 整体问题的最优解依赖各子问题的最优解 小问题之间还有相...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-28 13:36
后端
JZ66:机器人的运动范围
首先在某个节点处,要调用递归来决定某个位置的下一步去哪,此时有4个选择,每个选择都会进入下一个递归调用。当进入某个位置时,应当标记这个位置已访问过,避免之后又来到这里,从而重复计算,因此设计一个boolean的数组,这里设计的二维,也可以通过压缩,使用一维数组来表征某个位置是否访问。二维就是记录横纵坐标即第i行第j列的数据被访问了,直观,推荐新手用二维。接着就是边界条件和递归结束的条件的判断了。 这类型题也是有套路的,主方法在原点作为起点,调用第一次递归后,在递归方法中,首先判断边界条件以及题目中所提的要求是否满足(本题的要求就是cal方法中的实现),都没问题,说明该位置可以访问,然后改变对...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-07-10 15:09
已编辑
后端
JZ59:按之字形顺序打印二叉树
使用链表的辅助空间来实现,利用链表的反向迭实现逆序输出 解法1:增加两个TreeNode:last和nlastlast:表示当前遍历层最右结点nlast:表示下一层最右结点遍历时,每次将nlast指向插入队列元素,最后一个插入结点时即最右结点。插入左右孩子之后,检测last是否为当前输出结点,若是,则表示需要进行换行,并将last指向下一层的nlast。 import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; /* public class TreeNode { int val =...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-27 17:26
后端
JZ60:把二叉树打印成多行
解法1:增加两个TreeNode:last和nlast last:表示当前遍历层最右结点 nlast:表示下一层最右结点 遍历时,每次将nlast指向插入队列元素,最后一个插入结点时即最右结点。插入左右孩子之后,检测last是否为当前输出结点,若是,则表示需要进行换行,并将last指向下一层的nlast。 public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>>...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-27 16:07
后端
JZ57:二叉树的下一个结点
思路: 1.如果有右孩子,后继节点就是最左边的 2.如果没有右孩子,判断是否是父节点的左孩子,是的话,返回,不是继续往上找 3.找不到就是null 即:如果一个结点有右子树,就将它右子树上最左的结点返回,否则将当前结点的指针往上窜,当窜到它是它父结点的左结点时停止,此时那个父结点就是原结点的后继 /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkN...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-27 15:06
后端
JZ56:删除链表中重复的结点(不保留/保留)
删除有序链表中重复出现的元素(不保留) 给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→5, 返回1→2→5.给出的链表为1→1→1→2→3, 返回2→3. 输入 {1,2,2} 返回值 {1}解法1:伪结点&双指针 1.设置伪结点,方便处理 2.双指针pre和cur 3.当遇到当前节点值和下一节点值相等的节点时,进行while循环找到下一个不相等的节点,挂到prev节点上 4.当遇到当前节点值和下一节点值不相等的节点时,prev和curr都移动到下一个节点接着遍历就行 public ListN...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 22:07
后端
JZ51:构建乘积数组
方法1:遍历 思路:也就是B[i]=A[0]*A[1]...A[n] 其中不包括A[i]; //-------------复杂度为O(n^2)---------- public int[] multily1(int[] A){ if(A.length==0){ return A; } int[] B=new int[A.length]; int result=1; for(int i=0;i<A.length;i++){ for(int j=0;j&l...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 20:08
后端
JZ48:不用加减乘除做加法
首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: 5-101,7-111第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。第二步:计算进位值,得到1010,相当于各位做与操作得到101,再向左移一位得到1010,(101&111)<<1。第三步重复上述两步, 各位相加 010^101...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 20:03
已编辑
后端
JZ46:孩子们的游戏(圆圈中最后剩下的数)
解法1:数学 + 迭代+递归 反推过程:(当前index + m) % 上一轮剩余数字的个数最终剩下一个人时的安全位置肯定为1,反推安全位置在人数为n时的编号人数为1: 0人数为2: (0+m) % 2人数为3: ((0+m) % 2 + m) % 3人数为4: (((0+m) % 2 + m) % 3 + m) % 4........迭代推理到n就可以得出答案 public int LastRemaining2(int n, int m){ if (m &lt; 1 || n &lt; 1) return -1; ...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 19:22
后端
题解 | #左旋转字符串#
方法1:三次翻转 public class Solution { public String LeftRotateString(String str,int n) { if(str.length()==0 || n>=str.length()){ return str; } char[] chars=str.toCharArray(); reverse(chars,0,n-1); reverse(chars,n,chars.length-1); reverse(...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 16:25
已编辑
后端
JZ40:数组中只出现一次的两个数字
方法1:使用哈希表存储不重复的数字 import java.util.HashMap; public static void FindNumsAppearOnce1(int[] array,int[] num1,int[] num2){ HashMap<integer,integer> map=new HashMap&lt;&gt;(); for(int i=0;i<array.length;i++){ if(map.containskey(array[i])){ map.remove(array[i]); } else map...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 16:21
后端
JZ41:和为S的连续正数序列
思路:连续序列的最大数big,最小数small;区间之和为Sum import java.util.ArrayList; public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum){ ArrayList<ArrayList<Integer>> res=new ArrayList<>(); int small=1; int big=2; if(sum<3){ retu...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-26 15:48
后端
JZ39:平衡二叉树
思路:空树,或者左右子树的深度差不超过1; public boolean isBalanceTree(TreeNode root){ return getDepth(root)!=-1; } public int getDepth(TreeNode root){ if(root==null){ return 0; } int leftDepth=getDepth(root.left); if(leftDepth==-1){ //左子树不为平衡二叉树,节省空间 return -1;...
剑指Offer题解
0
点赞
评论
收藏
转发
LifelongCode
2021-05-25 17:45
后端
JZ37:数字在升序数组中出现的次数
方法1:遍历,时间复杂度为O(n); public static int GetNumberOfK1(int [] array , int k){ if(array.length==0){ return 0; } int count=0; for(int i=0;i<array.length;i++){ if(array[i]==k){ count++; } } return cou...
剑指Offer题解
0
点赞
评论
收藏
转发
1
4
5
6
7
8
12
工具箱
TA的圈子
暂未加入圈子
TA的圈子
TA的笔记
暂无笔记
TA的笔记
登录
0
天
已登录
0
天
连续登录
0
人
今日访客
牛客网
牛客企业服务