![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法学习
平时手敲的算法记录下思路代码
记录点滴1076
这个作者很懒,什么都没留下…
展开
-
每天一道算法:leetcode:和为K的子数组
package com.myproject.demo.算法;import java.util.HashMap;import java.util.Map;//给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。//// 示例 1 ://////输入:nums = [1,1,1], k = 2//输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。////// 说明 :////// 数组的长度为 [1, 20,000]。// 数组中元.原创 2020-05-15 16:10:30 · 210 阅读 · 0 评论 -
每天一道算法:二叉树的层序遍历
package com.myproject.demo.算法;import java.util.ArrayList;import java.util.List;import java.util.Queue;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/** * 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节.原创 2020-05-14 09:44:47 · 117 阅读 · 0 评论 -
每天一道算法:15. 三数之和
package com.myproject.demo.算法;import com.sun.tools.javac.util.ArrayUtils;import org.apache.lucene.util.CollectionUtil;import org.elasticsearch.common.util.CollectionUtils;import java.util.*;/** * 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a.原创 2020-05-12 14:37:05 · 133 阅读 · 0 评论 -
每天一道算法;leetcode 50. Pow(x, n)
今天题目简单直接上代码package com.myproject.demo.算法;/** * 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 * <p> * 示例 1: * <p> * 输入: 2.00000, 10 * 输出: 1024.00000 * <p> * 示例 2: * <p> * 输入: 2.10000, 3 * 输出: 9.26100 * <p> * 示例 3: * <p>原创 2020-05-11 13:19:27 · 186 阅读 · 0 评论 -
算法加餐个简单题-x的平方根
package com.myproject.demo.算法;/** * 实现 int sqrt(int x) 函数。 * <p> * 计算并返回 x 的平方根,其中 x 是非负整数。 * <p> * 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 * <p> * 示例 1: * <p> * 输入: 4 * 输出: 2 * <p> * 示例 2: * <p> * 输入: 8 * 输出: 2.原创 2020-05-09 17:55:00 · 126 阅读 · 0 评论 -
每天一道算法:leetcode 221. 最大正方形
package com.myproject.demo.算法;/** * 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 * <p> * 示例: * <p> * 输入: * <p> * 1 0 1 0 0 * 1 0 1 1 1 * 1 1 1 1 1 * 1 0 0 1 0 * <p> * 输出: 4 * * @author yuJie * @since 2020/5/8 */pub.原创 2020-05-09 17:53:27 · 101 阅读 · 0 评论 -
每日一道算法:leetcode 236. 二叉树的最近公共祖先
package com.myproject.demo.算法;/** * 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 * <p> * 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” * <p> * 例如,给...原创 2020-05-07 13:39:09 · 157 阅读 · 0 评论 -
每日一道算法题:leetcode 983. 最低票价
package com.myproject.demo.算法;import java.util.HashSet;import java.util.Set;/*** * * 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 * * 火车票有三种不同的销售方式: ...原创 2020-05-06 19:21:31 · 212 阅读 · 0 评论 -
leetcode98题 二叉搜索树校验
package com.myproject.demo.算法;/** * 二叉搜索树校验 * <p> * 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 * <p> * 假设一个二叉搜索树具有如下特征: * <p> * 节点的左子树只包含小于当前节点的数。 * 节点的右子树只包含大于当前节点的数。 * 所有左子树和右子树自身必须也是二叉...原创 2020-05-05 15:53:37 · 145 阅读 · 0 评论 -
二叉最优搜索树java实现
package com.bysj.common.算法.动态规划;/*** 二叉最优搜索树使用场景:** 现在我有一张英文单词的文章,我要根据字典翻译为中文,所以我先要把字典构造成一个二叉最优搜索树,其中有的字搜索频率很高比如:草,爱,做等* 所以我先给每个字定义一个频率q,这样每次搜索一个字的时候所需要的消耗就是pi*(depth{ki}+1){算法导论有论证};现在我们要构造一个遍...原创 2020-03-11 22:36:50 · 593 阅读 · 0 评论 -
堆排序java实现
堆和普通树的区别堆并不能取代二叉搜索树,它们之间有相似之处也有一些不同。我们来看一下两者的主要差别:节点的顺序。在二叉搜索树中,左子节点必须比父节点小,右子节点必须必比父节点大。但是在堆中并非如此。在最大堆中两个子节点都必须比父节点小,而在最小堆中,它们都必须比父节点大。内存占用。普通树占用的内存空间比它们存储的数据要多。你必须为节点对象以及左/右子节点指针分配额为是我内存。堆仅仅使用...原创 2020-03-01 15:56:08 · 81 阅读 · 0 评论 -
常用的图算法关系整理
原创 2020-02-16 20:01:10 · 495 阅读 · 0 评论 -
Leetcode 120. 三角形最小路径和朴素法和动态规划实现
题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。直接上代码:import java.util.ArrayList;import jav...原创 2020-01-21 10:53:26 · 161 阅读 · 0 评论 -
leetcode72题编辑距离-动态规划
题目给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释:horse -> rorse (将 'h' 替换为 'r')ro...原创 2020-01-16 14:58:43 · 197 阅读 · 0 评论 -
leetcode200题岛屿的数目-染色法和并查集实现java代码
题目:给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3直接上代码:染色法实现:...原创 2020-01-14 14:53:54 · 441 阅读 · 0 评论 -
leetcode300题最长上升子序列(动态规划和非规划实现)
题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log...原创 2020-01-13 11:36:05 · 221 阅读 · 0 评论 -
0-1背包问题
package com.bysj.common.算法;/** * 动态规划解决: * dp状态转移方程二维数组: * i:表示第i个物品,c代表剩余的容量,dp[][]的值表示当前价值 * int[i][c] dp = * if(w[i]<c) * { * dp[i][c] = max(dp[i-1][c-w[i]]+v[i-1],dp[i-1][c]); * } ...原创 2020-01-08 11:39:48 · 105 阅读 · 0 评论 -
二叉树栈实现前中后序遍历(易理解的方法)
说明:首先你需要看懂用栈实现中序遍历的代码,理解其思想:从根节点开始入栈,找到他的左子树入栈.....一直到他的左子树为空了,左边到头了,取出当前根节点的值,从栈中取出当前根节点然后找他的右子树继续入栈,找左子树入栈.....,直到右边取完了这时候一个节点就遍历完了,然后继续从栈中取上一个节点继续其实考虑下为什么用栈呢?就是用他来回溯的要回溯到根节点,对于中序遍历:左中右,我按照右中左...原创 2019-12-29 16:00:15 · 275 阅读 · 0 评论 -
leetcode 去除重复字母
题目:给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入: "bcabc"输出: "abc"示例 2:输入: "cbacdcbc"输出: "acdb"分析:1.什么叫字典序:26个英文字母的顺序2.什么叫字符的相对位置,就是你只能删除重复的但是不能左右移动元...原创 2019-12-29 14:47:06 · 1060 阅读 · 0 评论 -
leetcode 数字范围按位与
题目:给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0思路:分析题目:输入 5,7:结果=4 怎么计算的呢:5:1016:1107:111按位与:100 = ...原创 2019-12-28 17:48:12 · 218 阅读 · 0 评论 -
leetcode 78题子集
题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路:和求组合求和一样,求数组的相关的题目可以把题目解析为一棵树,或者森林就好...原创 2019-12-28 15:20:17 · 105 阅读 · 0 评论 -
leetcode215数组中的第K个最大元素-堆实现
题目来着leetcode:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。...原创 2019-12-24 19:55:31 · 175 阅读 · 0 评论 -
leetcode42-接雨水-栈实现
题目不说了,看上一篇,这一篇是用栈实现的public static int trap(int[] height) { int sum = 0; if (height.length == 0) { return 0; } Stack<Integer> stack = new Stack<&...原创 2019-12-23 21:42:05 · 145 阅读 · 0 评论 -
leetCode 42接雨水-方法一动态编程
题目描述来自leetcode给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6...原创 2019-12-23 20:33:36 · 129 阅读 · 0 评论 -
leetCode39题组合总和算法
题目:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。示例 1:输入: candidates = [2,3,5], target =...原创 2019-12-20 14:14:36 · 234 阅读 · 0 评论