
算法
一个想努力学技术的程序员
我本想不加班,结果天天加班
展开
-
JZ86 在二叉树中找到两个节点的最近公共祖先
示例1输入:{3,5,1,6,2,0,8,#,#,7,4},5,1返回值:3示例2输入:{3,5,1,6,2,0,8,#,#,7,4},2,7返回值:2第一种解法使用递归解决,将每个节点的左子树,每个节点的右子树都当做一个新的完整的树,进行递归判断即可,判断逻辑为* step 1:如果o1和o2中的任一个和root匹配,那么root就是最近公共祖先。* step 2:如果都不匹配,则分别递归左、右子树。* step 3:如果有一个节点出现在左子树,并且另一个节...原创 2022-04-26 14:20:35 · 1764 阅读 · 0 评论 -
剑指offer-JZ18 删除链表的节点(Java版)
描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000示例1输入:{2,5,1,9},5返回值:{2,1,9}说明:给定你链表中值为 5 的第二个节原创 2022-04-11 17:18:37 · 1107 阅读 · 0 评论 -
JZ44 数字序列中某一位的数字(Java版)
描述数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。示例1输入:0返回值:0示例2输入:2返回值:2示例3输入:10返回值:1示例4输入:13返回值:1第一种解法思路:数学先观察数字规律小于10,1~9,9个数字,9位小于100,10~99,90个数字,180位原创 2022-03-29 09:07:28 · 614 阅读 · 0 评论 -
剑指offer-把数字翻译成字符串(Java版)
描述有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。现在给一串数字,返回有多少种可能的译码结果数据范围:字符串长度满足 0 < n \le 900<n≤90进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)示例1输入:"12"返回值:2说明:2种可能的译码结果(”ab” 或”l”)示例2输入:"31717126241541717"返回值:192说明:192种可能的译码结果原创 2022-03-12 11:48:38 · 1147 阅读 · 0 评论 -
剑指offer-JZ48 最长不含重复字符的子字符串(Java版)
描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。数据范围:\ \text{s.length}\le 40000 s.length≤40000示例1输入:"abcabcbb"返回值:3说明:因为无重复字符的最长子串是"abc",所以其长度为 3。示例2输入:"bbbbb"返回值:1说明:因为无重复字符的最长子串是"b",所以其长度为 1。示例3输入:"pwwkew"返回值:3说明:因为无重复字符的最长子串是 "wke原创 2022-03-07 17:43:30 · 552 阅读 · 0 评论 -
剑指offer-JZ47 礼物的最大价值(Java版)
描述在一个m\times nm×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?如输入这样的一个二维数组,[[1,3,1],[1,5,1],[4,2,1]]那么路径 1→3→5→2→1 可以拿到最多价值的礼物,价值为12示例1输入:[[1,3,1],[1,5,1],[4,2,1]]返回原创 2022-03-04 15:58:02 · 684 阅读 · 0 评论 -
剑指offer-JZ63 买卖股票的最好时机(一)(Java版)
描述假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费4要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)示例1输入:[8,9,2,5,4,7,1]返回值:5说明:在第3天(股票价格 = 2)..原创 2022-03-04 14:51:38 · 191 阅读 · 0 评论 -
设计LRU缓存结构(Java版)
描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能1. set(key, value):将记录(key, value)插入该结构2. get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的,然后都会刷新缓存。2.当缓存的大小超过k时,移除最不经常使用的记录。3.输入一个二维数组与k,二维数组每一维有2个或者3个数字,第1个数字为opt,第2,3个数字为key原创 2022-03-03 11:40:18 · 829 阅读 · 0 评论