自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

空调不够冷

努力的往前飞,再累也无所谓 黑夜过后的光芒有多美

  • 博客(31)
  • 问答 (4)
  • 收藏
  • 关注

原创 x 的平方根

题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。思路分析x的平方根的范围在1~x/2之间,所以我们可以用双指针解题:lower = 1;high = x/2; mid = lower + (high - lower) / 2;判断: mid * mid == x => return mid;mid * mid < x => lower = mid + 1;

2020-08-21 01:06:37 316

原创 被围绕的区域

题目描述:给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。思路分析:该题和岛屿数量特别相似,这道题的难点在于边界的0和内部多个0的连通情况的处理,如下图:底部边界的0和内部的0是连通的,所以都不需要把这些0改为X。(1)我们可以对边界进行dfs遍历,将所有的连通的0找到,改为字母‘A’;(2)遍历数组,遇到元素’0’,改为’X’,遇到元素‘A’,改为’0’可知‘A’是不需要修改的,所以要改回去。

2020-08-17 20:17:02 129

原创 最长公共子串

题目描述:有两个字符串str1和str2,求出两个字符串中最长公共子串长度。例子:str1=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最长公共子串长度为5。思路分析:(1)将2个字符串str1和str2分别以行和列组成一个二维数组res[][];(2)如果str1[i] == str2[j],res[i][j] = 1;(3)我们可以根据对角线来判断公共字符,最后从中选择出长度最大的字符。如下:图中可以看出:str1和str2共有5个公

2020-08-16 22:56:04 128

原创 查找

二分查找参考代码:public int binSearch(int[] a, int target){ int lower = 0; int high = a.length - 1; while(lower <= high){ int mid = lower + (high - lower) / 2; if(a[mid] > target)high = mid - 1; else if(a[mid] < target) lower = m

2020-08-16 21:44:25 104

原创 最长连续序列

题目描述:给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。题目分析:大致思路:找到每一个连续序列的首元素,然后求长度,最后返回多个连续序列中最大的长度。我们可以先将元素去重,然后遍历元素X:若元素X-1在不数组中,则判断以X为首的元素的连续序列的最大长度。否则,continue。怎么去重呢?将元素存到Set中!参考代码: public int longestConsecutive(int[] nums) { if(nums == nul

2020-08-16 03:25:16 190

原创 排序

冒泡排序public void Popsort(int[] nums){ int n = nums.length; boolean flag = false; for(int i = 0; i < n - 1; i++){ for(int j = 1; j <= n - 1 - i; j++){ if(nums[j] < nums[j - 1]){ swap(nums, j, j - 1); flag = true

2020-08-16 02:44:42 114

原创 最长公共子序列

题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。题目分析:定义dp[i][j] 的含义是:对于 s1[1…i] 和 s2[1…j],它们的 LCS 长度是 dp[i][j]。则s1.charAt(i) == s2.charAt(j)时,dp[i][j] = dp[i - 1][j - 1]s1.charAt(i) != s2.charAt(j)时,dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])参

2020-08-16 01:57:20 76

原创 三数之和

题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。题目分析:设置从头遍历链表,范围为0~length - 3,设置2个指针i,j,分别指向当前节点的下一个结点和最后一个结点,判断当前元素:x + nums[i] + nums[j] = 0;加入结果集。x + nums[i] + nums[j] < 0; 执行i++;x +

2020-08-16 00:50:43 70

原创 给定一个链表,删除奇数索引的节点

题目描述:给定一个链表,删除奇数索引的节点参考代码:索引从1开始时 //索引从1开始时 public static Node deleteOddNode(Node node){ //创建辅助结点 Node p = new Node(-1); p.next = node; Node q = p; while(q != null && q.next != null){//注意这里的q.

2020-08-15 02:10:14 752

原创 单向链表根据value奇偶性拆成2个链表,并且返回的两个链表是升序的

题目描述:面试题:一个单向链表,根据value的奇偶性拆成2个链表,并且返回的两个链表是升序的 。先来复习下直接插入排序算法:public void InsertSort(int[] num){ if(num == null || num.length == 0)return; for(int i = 1; i < num.length; i++){ if(num[i] < num[i - 1]){ int temp = num[i];

2020-08-15 01:24:50 302

原创 LeetCode之岛屿数量

题目描述给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。参考代码:DFS public int numIslands(char[][] grid) { if(grid == null)return 0; int count = 0; for(int i = 0; i < grid.length; i++){

2020-08-14 20:57:38 142

原创 剑指Offer之数据流中的中位数

题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路分析:如果数字个数为偶数,中位数为中间的2个数的平均数,如:1,2,3,4,中位数为(2+3)/ 2 = 2.5如果数字个数为奇数,中位数为中间的数。如:1, 2, 3,中位数为 2;前提是数字先排好序。我们可以把数字分为2部分:前半部分和后半部分,前半部分用大顶堆B存储,则最大值在堆顶,

2020-08-14 13:52:10 169 1

原创 剑指Offer之剪绳子

题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。参考代码:public int cutRope(int target) { if(target < 2)return 0; int[]

2020-08-13 22:05:15 66

原创 剑指Offer之矩阵中的路径

题目描述:参考代码: public boolean hasPath(char[] matrix, int rows, int cols, char[] word) { if(matrix == null || cols < 0 || rows < 0)return false; //转换为二维数组 int k = 0; char[][] board = new char[rows][cols]; for(int

2020-08-13 00:42:30 77

原创 剑指Offer之二插搜索树的第k大/小结点

说明:该题牛客和力扣有点区别,下面分别来进行解决。题目描述(1)力扣:给定一棵二叉搜索树,请找出其中第k大的节点。注意:这里是求第k大结点,而且题目给的返回值为int,是个数值。思路分析:求二插搜索树的第k大结点,则用右根左的方式遍历二叉树序列,结果为递减序列,找到其中的第k个元素即可。参考代码:class Solution { private int res;//定义成员变量 private int k;//定义成员变量 public int kthLarg

2020-08-11 10:51:41 111

原创 剑指Offer之删除排序链表中的重复结点

说明:该题有2种版本,力扣和牛客是不同的版本,先看力扣上面的简单的版本。题目描述:力扣:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。输入: 1->1->2输出: 1->2可以看到重复的元素只保留1个。参考代码:public ListNode deleteDuplicates(ListNode head) { if(head == null)return head; ListNode p = head; while(p != null &am

2020-08-11 09:34:53 224

原创 剑指Offer之二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路分析参考分析主要分3中情况:(1)当前节点有右子树:返回当前节点右子树最左结点;(2)当前节点无右子树、是父节点的左子树中的结点:返回父节点;(3)当前节点无右子树、是父节点的右子树中的结点:找到一个节点,该结点的父节点的左直接左孩子是该结点,返回父节点。参考代码public TreeLinkNode GetNext(TreeLinkNo

2020-08-10 14:57:06 88

原创 剑指Offer之和为s的2个数字

题目描述:这道题牛客和力扣有小小的区别,力扣比较简单,直接输出符合条件的一个就行,而牛客要输出乘积最小的一个,稍微有点麻烦,但是思路大体相同。牛客题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。注意:对应每个测试案例,输出两个数,小的先输出。参考代码: public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {

2020-08-10 09:38:50 147

原创 剑指Offer之判断平衡二叉树

题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树参考代码:public boolean IsBalanced_Solution(TreeNode root) { if(root == null)return true; return judge(root) != -1;}public int judge(TreeNode root){ if(root == null)return 0; int

2020-08-10 08:47:20 96

原创 剑指Offer之二叉树的深度

题目描述:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。参考代码:递归 public int maxDepth(TreeNode root) { if(root == null)return 0; return Math.max(maxDepth(root.left), maxDepth(root.right) + 1); }层序遍历public int TreeDepth(TreeNo

2020-08-09 23:26:22 93

原创 剑指Offer之二插树后续遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考代码:public boolean VerifySquenceOfBST(int [] sequence) { //注意:这里返回值 牛客网和之前leetcode有区别 if(sequence == null || sequence.length == 0)return false; if(se

2020-08-07 20:03:13 74

原创 剑指Offer之判断一棵二叉树是不是对称

题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。参考代码boolean isSymmetrical(TreeNode root){ if(root == null)return true; LinkedList<TreeNode> queue = new LinkedList<>(); queue.addLast(root); queue.

2020-08-06 02:06:20 123

原创 2020-08-06

题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路分析:遍历数组,如果第index个位置的数字为index,i++;如果numbers[numbers[i]] == numbers[i],说明2个未知的元素重复,返回;否则,交换两个数字。参考代码:public b

2020-08-06 01:39:40 179

原创 剑指 Offer之最小的k个数

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。思路分析:可以用容量为k的大顶堆来解决该题目,大顶堆堆顶元素最大,其他元素都小于堆顶元素,每当遇到比堆顶元素小的元素,就加入堆中,堆中元素个数为k+1时,删除堆顶元素。最后返回堆中的所有元素。参考代码: public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {

2020-08-05 21:45:55 144

原创 剑指Offer之连续子数组的最大和

题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。参考代码:public int FindGreatestSumOfSubArray(int[] array) { if(array == null || array.length == 0)return 0; int sum = array[0]; int max = array[0]; for(int i = 1; i < arra

2020-08-05 21:19:23 150

原创 剑指 Offer之 二叉树的镜像

题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。参考代码1:递归public void Mirror(TreeNode root) { if(root == null || (root.left == null && root.right == null))return; dfs(root); } public TreeNode dfs(TreeNode root){ if(root == null ||

2020-08-05 20:40:26 134 1

原创 剑指Offer之跳台阶和变态跳台阶

题目一:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。参考代码:public int JumpFloor(int target) { if(target == 0)return 1; if(target == 1)return 1; int p1 = 1; int p2 = 1; for(int i = 2; i <= target; i++)

2020-08-04 08:57:32 170

原创 在线教育总结

功能点技术点遇到问题功能点后台:登录功能:Spring Security权限管理功能:(1)菜单管理:列表、添加、修改、删除(2)角色管理:列表、添加、修改、删除(3)用户管理:列表、添加、修改、删除、为用户添加角色,为角色添加权限(4)权限管理至少需要5张表:用户表、权限表、角色表、用户角色表、权限角色表讲师管理功能:讲师的条件查询分页列表、增加、修改、删除课程分类功能:(1)添加课程分类:读取Excel中的课程分类,然后加入到DB中。(2)课程分类列表.

2020-08-03 09:58:55 252

原创 在线教育day18

任务:整合Spring Security框架整合权限管理的前端页面Nacos配置中心Git远程版本控制整合Spring Security框架包含2部分:用户认证,用户授权。本质上就是过滤器。流程:如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于token的形式进行授权与认证,用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值,并以用户名为key,权限列表为value的形式存入redis缓存中,根据用户名相关信息生成token返回,浏览器将token记录

2020-08-02 19:18:59 110

原创 在线教育day17

任务:canal数据同步工具SpringCloud组件GateWay网关权限管理模块(1)需求(2)典型接口1 canal数据同步工具2. SpringCloud组件GateWay网关测试:3 权限管理需求创建子模块;引入依赖;配置文件递归查询菜单ControllerService...

2020-08-02 12:10:30 156

原创 在线教育day16

任务:支付成功总结课程详情页立即观看和立即购买完善系统后台—统计分析模块(1)需求(2)生成统计数据功能(3)图表方式显示统计数据1. 支付成功总结2 完善支付根据课程id、用户id、支付状态去查找订单表,若查不出记录,禁止播放。3. 统计分析模块建表实现创建service-sta模块,调用service-ucenter模块接口(查询某天的注册人数接口),得到注册人数,添加到统计表中,并用图表展示出来bug:第一次查找,会将统计结果放DB中,

2020-08-01 11:05:19 109

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除