
算法题
文章平均质量分 54
ritagreen123
这个作者很懒,什么都没留下…
展开
-
二叉树总结
226. 翻转二叉树前序遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, Tree原创 2021-12-07 20:37:19 · 190 阅读 · 0 评论 -
算法题--动态规划
一、最长上升子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。labuladong题解class Solution { public int lengthOfLIS(int[原创 2021-09-17 22:13:09 · 124 阅读 · 0 评论 -
算法题-java
dp背包问题问题:动态规划的优化给你一个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。其中第 i 个物品的重量为 wt[i],价值为 val[i],现在让你用这个背包装物品,最多能装的价值是多少?二叉树所有路径的拼接二叉树的每个节点为0-9的一个数字,根到叶子的一条路径拼成一个数,求所有路径形成的数字和struct TreeNode{ TreeNode* left; TreeNode* right; int value;}; int dfs(原创 2021-08-25 22:20:32 · 310 阅读 · 0 评论 -
剑指 offer第54题-二叉查找树的第 K 个结点
中序遍历二叉查找树,就是一个从小到大的顺序,每次记录节点个数/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/pub...原创 2019-07-23 21:41:52 · 159 阅读 · 0 评论 -
剑指 offer第55.1题-二叉树的深度
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。非递归:层次遍历求深度import java.util.Queue;import java.util.LinkedList; public class Solution { public int TreeDepth(TreeNode pRoot) { if(pRoo...原创 2019-07-23 22:01:46 · 102 阅读 · 0 评论 -
剑指 offer第55.2题-平衡二叉树
平衡二叉树左右子树高度差不超过 1。分别计算左右子树的高度,若是差值不超过1,则为平衡二叉树。这是最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。public classSolution { public boolean IsBalanced_Solution(TreeNode root) { ...原创 2019-07-23 22:22:39 · 113 阅读 · 0 评论 -
剑指 offer第45题-把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323解题思路可以看成是一个排序问题,在比较两个字符串 S1 和 S2 的大小时,应该比较的是 S1+S2 和 S2+S1 的大小,如果 S1+S2 < S2+S1,那么应该把 S1 排在前面,否则应该把 S...原创 2019-07-19 11:10:09 · 201 阅读 · 0 评论 -
剑指 offer第55.2题-数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。两个不相等的元素在位级表示上必定会有一位存在不同,将数组的所有元素异或得到的结果为不存在重复的两个元素异或的结果。diff &= -diff 得到出 diff 最右侧不为 0 的位,也就是不存在重复的两个元素在位级表示上最右侧不同的那一位,利用这一位就可以将两个元素区分开来。//num1,nu...原创 2019-07-24 10:44:16 · 125 阅读 · 0 评论 -
剑指 offer第46题-把数字翻译成字符串
给定一个数字,按照如下规则翻译成字符串:1 翻译成“a”,2 翻译成“b”… 26 翻译成“z”。一个数字有多种翻译可能,例如 12258 一共有 5 种,分别是 abbeh,lbeh,aveh,abyh,lyh。实现一个函数,用来计算一个数字有多少种不同的翻译方法。public int numDecodings(String s) { if (s == null || s.length...原创 2019-07-19 15:27:22 · 148 阅读 · 0 评论 -
剑指 offer第53题-数字在排序数组中出现的次数
Input:nums = 1, 2, 3, 3, 3, 3, 4, 6K = 3Output:4首先是排序数组,需要找到这个数字,可以使用二分查找。public class Solution { public int GetNumberOfK(int [] array , int k) { int first=binarySearch(array,k);...原创 2019-07-23 21:04:55 · 140 阅读 · 0 评论 -
剑指 offer第52题-两个链表的第一个公共结点
设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。长度相同有公共结点,...原创 2019-07-23 17:43:30 · 95 阅读 · 0 评论 -
剑指 offer第40题-最小的k个数
用快排把数组分为k的两部分,元素之间大小不去详细比较,只比较k个数大还是k个数小。import java.util.ArrayList;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { ArrayList<In...原创 2019-07-16 17:45:22 · 131 阅读 · 0 评论 -
剑指 offer第39题-数组中出现次数超过一半第数字
要求数组中出现次数超过一半的数字,可以遍历一遍数组,同时记录其出现的次数,把数组分为两部分,一个是出现次数超过一半的数字,另一个是其他数字,用其他数字来抵消该数字出现的次数,如果有该次数,times就一定不为零。public class Solution { public int MoreThanHalfNum_Solution(int [] array) { if(ar...原创 2019-07-16 16:50:23 · 123 阅读 · 0 评论 -
剑指 offer第44题-数字序列中的某一位数字
数字以 0123456789101112131415… 的格式序列化到一个字符串中,求这个字符串的第 index 位。比如第13位是1,第19位是4,index是第n位,从0开始place是数字的位数,如1位数,2位数,1、getAmountOfPlace(int place)是获得place位上有多少个数字,如1位数有10个数字,2位数有90个数字,3位数有900个数字;2、getBe...原创 2019-07-18 22:13:30 · 215 阅读 · 0 评论 -
剑指 offer第51题-数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=2*10^5思路:相当于用归并排序,把数组拆分成两个两个,然后对比,前面的数大于后面的...原创 2019-07-23 17:00:26 · 232 阅读 · 0 评论 -
剑指 offer第38题-字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则打印出由字符 a, b, c 所能排列出来的所有字符串 abc, acb, bac, bca, cab 和 cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。全排列,把字符串分为两部分,一个是字符串的第一个字符,一个是第一个字符以后的所有字符。 //这一段就是...原创 2019-07-12 22:48:27 · 212 阅读 · 0 评论 -
剑指 offer第37题-序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。序列化二叉树:可以通过前序遍历二叉树来实现序列化,子节点为空的话就用#表示序列化后的字符串:1 2 4 # # 3 5 # # 6 # #其中用到indexof记录空格出现的位置:indexOf() 方法有以下四种形式:1、public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有...原创 2019-07-12 21:45:33 · 173 阅读 · 0 评论 -
leetcode第二题-listNode实现两数之和
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。You are given two non-empty linked lists representing two non-negative integers. The digits are stored in revers...原创 2019-06-24 17:27:49 · 1740 阅读 · 0 评论 -
剑指 offer第57.1题- 和为 S 的两个数字
输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。如果两个指针指向元素的和 sum == target,那么得到要求的结果;如果 sum > target,移动较大的元素,使 ...原创 2019-07-24 11:02:17 · 116 阅读 · 0 评论 -
剑指 offer第47题-礼物的最大价值
在一个 m*n 的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(大于 0)。从左上角开始拿礼物,每次向右或向下移动一格,直到右下角结束。给定一个棋盘,求拿到礼物的最大价值。例如,对于如下棋盘1 10 3 812 2 9 65 7 4 113 7 16 5解题思路应该用动态规划求解,而不是深度优先搜索,深度优先搜...原创 2019-07-19 17:08:22 · 371 阅读 · 0 评论 -
剑指 offer第63题-股票的最大利润
可以有一次买入和一次卖出,买入必须在前。求最大收益。使用贪心策略,假设第 i 轮进行卖出操作,买入操作价格应该在 i 之前并且价格最低。Input: [7,1,5,3,6,4]Output: 5Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.Not 7-1 = ...原创 2019-07-27 21:55:07 · 441 阅读 · 0 评论 -
剑指 offer第62题-圆圈中最后剩下的数
让小朋友们围成一个大圈。然后,随机指定一个数 m,让编号为 0 的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续 0…m-1 报数 … 这样下去 … 直到剩下最后一个小朋友,可以不用表演。约瑟夫环,圆圈长度为 n 的解可以看成长度为 n-1 的解再加上报数的长度 m。因为是圆圈,所以最后需要对 n 取余...原创 2019-07-27 16:22:01 · 213 阅读 · 0 评论 -
剑指 offer第61题-扑克牌顺子
五张牌,其中大小鬼为癞子,牌面为 0。判断这五张牌是否能组成顺子。1、数组排序2、计算0的个数3、计算所有相邻数字之间的空缺数4、要是空缺数小于或者等于0的个数,则连续5、可要是里面有对子,则不是顺子import java.util.*;public class Solution { public boolean isContinuous(int [] numbers) {...原创 2019-07-27 11:33:39 · 222 阅读 · 0 评论 -
剑指 offer第60题-n 个骰子的点数
把 n 个骰子扔在地上,求点数和为 s 的概率。Input: n = 1Output: [[1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]Explanation: Throw a dice, the sum of the numbers facing up may be 1, 2, 3, 4, 5, 6, ...原创 2019-07-26 22:16:30 · 285 阅读 · 0 评论 -
剑指 offer第50题-第一个只出现一次的字符位置
在一个字符串中找到第一个只出现一次的字符,并返回它的位置。Input: abaccOutput: b一、创建一个256的数组,来存放他们的出现次数:public class Solution { public int FirstNotRepeatingChar(String str) { int[] cts=new int[256]; for(i...原创 2019-07-22 21:33:19 · 130 阅读 · 0 评论 -
剑指 offer第49题-丑数
把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含因子 7。习惯上我们把 1 当做是第一个丑数。求按从小到大的顺序的第 N 个丑数。public class Solution { public int GetUglyNumber_Solution(int index) { if(index<=6)...原创 2019-07-22 20:49:29 · 179 阅读 · 0 评论 -
剑指 offer第48题-最长不含重复字符的子字符串
输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。public int longestSubStringWithoutDuplication(String str) { int curLen = 0; int maxLen = 0; int[] preIndex...原创 2019-07-22 12:09:03 · 314 阅读 · 0 评论 -
剑指 offer第59题-滑动窗口的最大值
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1} 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,他们的最大值分别为 {4, 4, 6, 6, 6, 5}。一、使用双向队列https://www.cnblogs.com/CarpenterLee/p/5468803.htmlimport java.util...原创 2019-07-25 20:59:38 · 690 阅读 · 0 评论 -
剑指 offer第58.2题-左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。假设字符串abcdef,n=3,设X=abc,Y=def,所以字符串可以表示成XY,如题干,问如何求得YX。假设X的翻转为XT,XT=c...原创 2019-07-25 09:51:08 · 107 阅读 · 0 评论 -
剑指 offer第58.1题-翻转单词顺序列
Input:“I am a student.”Output:“student. a am I”题目应该有一个隐含条件,就是不能用额外的空间。虽然 Java 的题目输入参数为 String 类型,需要先创建一个字符数组使得空间复杂度为 O(N),但是正确的参数类型应该和原书一样,为字符数组,并且只能使用该字符数组的空间。任何使用了额外空间的解法在面试时都会大打折扣,包括递归解法。正...原创 2019-07-25 09:13:26 · 214 阅读 · 0 评论 -
剑指 offer第57.2题-和为 S 的连续正数序列
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序import java.util.ArrayList;public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayLis...原创 2019-07-24 22:22:01 · 109 阅读 · 0 评论 -
剑指 offer第43题-从 1 到 n 整数中 1 出现的次数
求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。//主要思路:设定整数点(如1、10、100等等)作为位置点i(对应n的各位、十位、百...原创 2019-07-17 22:07:50 · 113 阅读 · 0 评论 -
剑指 offer第42题-连续子数组的最大和
{6, -3, -2, 7, -15, 1, 2, 2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。import java.lang.Math.*;public class Solution { public int FindGreatestSumOfSubArray(int[] array) { if(array.length==0||array...原创 2019-07-17 19:37:03 · 100 阅读 · 0 评论 -
剑指 offer第41.2题- 字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。思路:时间复杂度O(1),空间复杂度O(n)1、用一个128大小的数组统计每个字符出现的次数2、用一个队列,...原创 2019-07-17 17:47:59 · 159 阅读 · 0 评论 -
剑指 offer第41.1题-数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。import java.util.Comparator;import java.util.PriorityQue...原创 2019-07-17 16:57:15 · 123 阅读 · 0 评论 -
剑指 offer第36题-二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { thi...原创 2019-06-26 17:56:11 · 101 阅读 · 0 评论 -
剑指 offer第35题-复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。比一般的链表添加了一个随机指针public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null;...原创 2019-06-26 16:50:51 · 128 阅读 · 0 评论 -
剑指 offer18.2题-删除链表当中重复的节点
1、先判断是否为空,注意是或2、若头节点等于下一个节点,且下一个节点不为空,则可以之间到下一个节点到下一个节点3、若没有,则继续遍历下去/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/pu...原创 2019-06-20 21:50:34 · 124 阅读 · 0 评论 -
剑指 offer第13题-机器人的运动范围
地上有一个 m 行和 n 列的方格。一个机器人从坐标 (0, 0) 的格子开始移动,每一次只能向左右上下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 k 的格子。例如,当 k 为 18 时,机器人能够进入方格 (35,37),因为 3+5+3+7=18。但是,它不能进入方格 (35,38),因为 3+5+3+8=19。请问该机器人能够达到多少个格子?import java.uti...原创 2019-06-04 22:31:36 · 150 阅读 · 0 评论 -
剑指 offer第12题-矩阵中的路径
判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。首先将一维数组化为二维数组,然后遍历,比较值是否是字符串那个值,设有标记数组。public class Solution { private final static int[][] nex...原创 2019-06-04 21:44:27 · 210 阅读 · 0 评论