![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法题
刷题
瑞 新
求职中 • Java全栈养成计划
公众号 • 让我遇见相似的灵魂
回复领取:竞赛 书籍 项目 面试
左手代码,右手吉他,这就是天下:如果有一天我遇见相似的灵魂 那它肯定是步履艰难 不被理解 喜黑怕光的。如果可以的话 让我触摸一下吧 它也一样孤独得太久。 不一样的文艺青年,不一样的程序猿。
展开
-
【刷题】2021最新剑指Offer汇总
新手村关卡1-1 洛谷的第一个任务超级玛丽游戏(洛谷-P1000):点击这里A+B Problem(洛谷-P1001):点击这里原创 2020-04-10 17:14:34 · 5971 阅读 · 122 评论 -
【Java】最长公共子串
Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String name1 = in.nextLine(); String name2 = in.nextLine(); int sum = calcSimilarity(name1, name2); System.out.println(sum); ..原创 2021-03-19 22:47:51 · 1805 阅读 · 26 评论 -
【Java】创建二叉树,从上至下打印二叉树
/** * 二叉树的生成 */ public static ArrayList<ArrayList<Object>> PrintFromTopToBottom(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); ArrayList<ArrayList<Object>> ret = new ArrayL..原创 2021-03-19 22:38:35 · 599 阅读 · 28 评论 -
【剑指Offer】32.1 从上往下打印二叉树
NowCoder题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7原创 2021-02-12 17:34:43 · 2591 阅读 · 11 评论 -
【Java】质因数
题目质因数个数9 = 3 * 32个质因数解题思路质因数2开始注意break不必要的计算import java.util.Scanner;/** * @Author bennyrhys * @Date 2020-09-25 21:28 * 质因数个数 * 9 = 3 * 3 * 2个质因数 */public class T83 { public static void main(String[] args) { Scanner sc = new S原创 2020-09-25 22:06:35 · 1693 阅读 · 22 评论 -
【Java】括号匹配
{}括号匹配模式解题思路栈import java.util.Scanner;import java.util.Stack;/** * @Author bennyrhys * @Date 2020-09-20 15:24 */public class T71 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.ne原创 2020-09-21 21:27:28 · 1420 阅读 · 19 评论 -
【笔试】敏感词替换-携程旅游2020秋招笔试第一场
描述输入三行替换字符串被替换部分,根据全排列进行匹配解题思路import java.util.*;/** * @Author bennyrhys * @Date 2020-09-08 19:44 * jack * i love jack,jack love me * you * i love you,you love me */public class T42 { private static StringBuilder sb = new StringBuilder(原创 2020-09-08 22:10:33 · 2754 阅读 · 14 评论 -
【剑指Offer】18. 删除链表的节点
NowCode题目描述返回删除后的链表的头节点。输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.解题思路/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListN原创 2020-09-07 10:45:01 · 939 阅读 · 10 评论 -
【剑指Offer】17. 打印从1到最大的n位数
题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]解题思路快速幂class Solution { public int[] printNumbers(int n) { // 错误解法(题目返回值范围不严谨,不考虑溢出) 复习快速幂 int res = 1; int x = 10;原创 2020-09-07 09:55:36 · 1140 阅读 · 12 评论 -
【剑指Offer】68.2 二叉树的最近公共祖先
NowCode题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点原创 2020-09-07 08:23:41 · 1113 阅读 · 12 评论 -
【剑指Offer】68.1 二叉搜索树的最近公共祖先
NowCode题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释原创 2020-09-07 08:12:20 · 1047 阅读 · 12 评论 -
【剑指Offer】66. 构建乘积数组
NowCode题目给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]解题思路class Solution { public int[] constructArr(int[] a) { // 注意不可用除法 int len = a.le原创 2020-09-06 23:28:27 · 743 阅读 · 11 评论 -
【剑指Offer】67.把字符串转换成整数
NowCode题目描述题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0解题思路import java.util.*;import java.lang.*;public class Solution { public int StrToInt(String str) { // +2147483647 214748364 + 比较末尾数字范围,注意首字母符号位 // -2147483648 214原创 2020-09-05 12:07:58 · 768 阅读 · 12 评论 -
【剑指Offer】65.不用加减乘除做加法
NowCode题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路public class Solution { public int Add(int num1,int num2) { int result = 0; int carry = 0; do{ result = num1 ^ num2; //不带进位的加法 carry = (num1原创 2020-09-04 10:24:53 · 1006 阅读 · 11 评论 -
【剑指Offer】64.求1+2+3+...+n
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路数学、递归public class Solution { private static int[] res = {0}; public int Sum_Solution(int n) { // 数学规律 //return (1 + n) * n / 2; // 递归原创 2020-09-04 09:30:18 · 1764 阅读 · 24 评论 -
【剑指Offer】63. 股票的最大利润
NowCode题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。解题思路class Solution { public int maxProfit(int[] prices) {原创 2020-09-04 09:24:16 · 1017 阅读 · 22 评论 -
【剑指Offer】62.孩子们的游戏(圆圈中最后剩下的数)
NowCode题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下原创 2020-09-03 17:28:16 · 918 阅读 · 13 评论 -
【剑指Offer】61.扑克牌中的顺子
NowCode题目LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育原创 2020-09-03 17:27:47 · 1192 阅读 · 16 评论 -
【剑指Offer】60. n个骰子的点数
题目链接Lintcode题目描述把 n 个骰子扔在地上,求点数和为 s 的概率。解题思路动态规划使用一个二维数组 dp 存储点数出现的次数,其中 dp[i][j] 表示前 i 个骰子产生点数 j 的次数。空间复杂度:O(N2)class Solution { public double[] twoSum(int n) { // 1 1-6(1+5*n) 6^1 // 2 2-12 6^2 double all原创 2020-09-02 21:15:51 · 812 阅读 · 10 评论 -
【剑指Offer】59.2 队列的最大值
力扣题目请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1,原创 2020-09-01 12:38:50 · 747 阅读 · 15 评论 -
【剑指Offer】59. 1滑动窗口的最大值
NowCoder题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1} 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,他们的最大值分别为 {4, 4, 6, 6, 6, 5}。解题思路Dequeimport java.util.*;import java.lang.*;public class Solution { public ArrayList<Integer> maxInWin原创 2020-09-01 12:38:19 · 769 阅读 · 14 评论 -
【剑指Offer】58.2 左旋转字符串
NowCoder题目描述Input:S="abcXYZdef"K=3Output:"XYZdefabc"解题思路先将 “abc” 和 “XYZdef” 分别翻转,得到 “cbafedZYX”,然后再把整个字符串翻转得到 “XYZdefabc”。public class Solution { public String LeftRotateString(String str,int n) { if(str == null || str.length() == 0)原创 2020-08-31 17:15:24 · 786 阅读 · 11 评论 -
【剑指Offer】58.1 翻转单词顺序列
力扣NowCoder题目描述Input:"I am a student."Output:"student. a am I"class Solution { public String reverseWords(String str) { str = str.trim(); int r = str.length() - 1, l = r; StringBuilder res = new StringBuilder();原创 2020-08-31 17:14:59 · 768 阅读 · 10 评论 -
【剑指Offer】57.2 和为S的连续正数序列
NowCoder题目描述输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:[9, 10, 11, 12, 13, 14, 15, 16][18, 19, 20, 21, 22]。解题思路双指针import java.util.ArrayList;public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int tar) {原创 2020-08-30 16:09:13 · 2402 阅读 · 10 评论 -
【剑指Offer】57.1 和为 S 的两个数字
NowCoder题目描述输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。解题思路HashSet检测另一个是否存在import java.util.*;import java.lang.*;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {原创 2020-08-30 15:13:11 · 1006 阅读 · 12 评论 -
【剑指Offer】56.2 数组中只出现一次的数字,其他出现3次
题目在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4思路int位存储class Solution { public int singleNumber(int[] nums) { // 存储int 4*8=32每一位 int[] arr = new int[32]; for(int x : nums) for原创 2020-08-30 13:35:16 · 2697 阅读 · 11 评论 -
【剑指Offer】56.1 数组中只出现一次的数字,其他出现2次
NowCoder题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次,找出这两个数。解题思路两个不相等的元素在位级表示上必定会有一位存在不同,将数组的所有元素异或得到的结果为不存在重复的两个元素异或的结果。diff &= -diff 得到出 diff 最右侧不为 0 的位,也就是不存在重复的两个元素在位级表示上最右侧不同的那一位,利用这一位就可以将两个元素区分开来。x ^ y = z 互相异或可以得到另一个数diff &= -diff; 快速找到为1的不同位-42的原创 2020-08-30 12:54:39 · 936 阅读 · 10 评论 -
【剑指Offer】55.2 平衡二叉树
NowCoder题目描述平衡二叉树左右子树高度差不超过 1。public class Solution { // 求深度 public int TreeDepth(TreeNode root) { return root == null ? 0 : Math.max(TreeDepth(root.left)+1, TreeDepth(root.right)+1); } public boolean IsBalanced_Solution(TreeNod原创 2020-08-29 23:45:00 · 810 阅读 · 11 评论 -
【剑指Offer】55.1 二叉树的深度
NowCoder题目描述从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。递归/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution {原创 2020-08-29 23:33:41 · 847 阅读 · 12 评论 -
【剑指Offer】54. 二叉查找树的第 K 个结点
力扣NowCoder解题思路利用二叉查找树中序遍历有序的特点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private static int k1原创 2020-08-29 23:27:02 · 763 阅读 · 10 评论 -
【剑指Offer】53.1在排序数组中查找数字 I
NowCoder题目描述统计一个数字在排序数组中出现的次数Input:nums = 1, 2, 3, 3, 3, 3, 4, 6K = 3Output:4解题思路class Solution { public int search(int[] nums, int target) { if(nums == null || nums.length == 0) return 0; // 二分原创 2020-08-29 21:42:32 · 1617 阅读 · 13 评论 -
【剑指Offer】53.2 0~n-1中缺失的数字
力扣题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2解题思路二分class Solution { public int missingNumber(int[] nums) { // 二分 对比nums[i] == i if(nums == null || nums.length == 0)原创 2020-08-29 21:19:52 · 944 阅读 · 11 评论 -
【剑指Offer】52. 两个链表的第一个公共结点
NowCoder题目描述解题思路设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。/*public class ListNode { int val; Lis原创 2020-08-29 18:01:16 · 789 阅读 · 11 评论 -
【剑指Offer】51. 数组中的逆序对
力扣题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5思路归并两区间及跨区间class Solution { public int reversePairs(int [] array) { int len = array.length; if(len < 2) retur原创 2020-08-29 17:33:21 · 856 阅读 · 10 评论 -
【剑指Offer】京东笔经-金字塔弹球-2020-08-27
* 3 * 1 * 2 1 2 * 3 4 2 1 3解题思路动态规划/** * @Author bennyrhys * @Date 2020-08-27 20:07 *//* public class T31 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = ...原创 2020-08-28 13:24:17 · 1110 阅读 · 11 评论 -
【剑指Offer】50. 第一个只出现一次的字符位置
NowCoder题目描述在一个字符串中找到第一个只出现一次的字符,并返回它的位置。Input: abaccOutput: b解题思路最直观的解法是使用 HashMap 对出现次数进行统计import java.util.*;import java.lang.*;public class Solution { public int FirstNotRepeatingChar(String str) { HashMap<Character, Boolean&g原创 2020-08-27 15:47:22 · 1482 阅读 · 13 评论 -
【剑指Offer】49. 丑数
NowCoder题目描述把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含因子 7。习惯上我们把 1 当做是第一个丑数。求按从小到大的顺序的第 N 个丑数。解题思路public class Solution { public int GetUglyNumber_Solution(int index) { if(index == 0) return 0;原创 2020-08-27 13:21:30 · 1563 阅读 · 11 评论 -
【剑指Offer】48. 最长不含重复字符的子字符串
力扣题目描述输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。解题思路class Solution { public int lengthOfLongestSubstring(String s) { int res = 0, left = 0; HashMap<Character, Integer> hash = new HashMap&原创 2020-08-27 12:48:40 · 913 阅读 · 11 评论 -
【剑指Offer】47. 礼物的最大价值
力扣题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?解题思路class Solution { public int maxValue(int[][] f) { // 经典二维动态规划 f[i][j] = max(f[i-1][j], f[i][j-1]) in原创 2020-08-27 12:33:27 · 2194 阅读 · 11 评论 -
【剑指Offer】46. 把数字翻译成字符串
点击做题题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。解题思路class Solution { public int translateNum(int num) { String s = String.valueOf(num); // 0 ~ 25原创 2020-08-26 12:52:08 · 2155 阅读 · 10 评论