自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(608)
  • 资源 (1)
  • 收藏
  • 关注

原创 Go操作Redis

准备环境首先需要安装docker, 可参考菜鸟教程, docker环境配置好后,从docker hub 上拉一个redis镜像:docker pull nginx默认拉取最新版本的镜像拉取镜像后可以运行容器:docker run -d -p 6379:6379 --name redis redis参数说明-d指定后台运行容器 -p配置内外端口映射 --name 指定运行容器的名字再启动一个redis-cli连接上面启动的redis服务docker run -it --netwo

2022-01-09 14:11:01 1338

原创 字符串哈希

概念将字符串通过哈希函数转换为唯一的哈希值,可以减少内存占用,降低时间复杂度。问题时不同的字符串可能会得到相同的哈希值,也就是发生了哈希碰撞,因此哈希算法的难点就是就是如何来构造一个哈希函数,尽可能的避免哈希碰撞,以满足我们的使用需求。基本哈希方法给定字符串S=s1s2s3s4...S=s_1s_2s_3s_4...S=s1​s2​s3​s4​...令idx(x)=x−′a′+1idx(x)=x-'a'+1idx(x)=x−′a′+1, 或者直接使用x的ASCII码也行自然溢出法这种方法是利用数据

2021-12-23 13:18:30 460

原创 Go操作MySQL

Go操作MySql连接go语言中的database/sql包提供了Sql数据库的泛用接口,但是不提供具体的驱动。使用这个包时必须注入数据库驱动。下载依赖go get -u github.com/go-sql-driver/mysql使用MySql驱动func Open(driverName, dataSourceName string) (*DB, error)打开一个指定driverName的数据库,dataSourceName指定数据源import ( "database/sql

2021-12-22 23:02:58 1017

原创 MySQL 语句执行顺序

MySQL语句执行顺序相关链接关于sql和MySQL的语句执行顺序(必看!!!)MySQL语句执行顺序

2021-09-20 21:49:38 155

原创 手撕单例模式

大家好我是miHotel,今天来复习一下设计模式中的单例模式,下面是思维导图。什么是单例模式单例模式顾名思义,就是一个类从始至终只能创建一个对象,并且提供了一个全局访问点。ServletContext、ServletContextConfig、ApplicationContext、数据库连接池都是单例模式。饿汉单例模式首先是饿汉单例模式,所谓的“饿汉”就是不采用延迟加载,在类加载的时候就初始化,并创建单例对象。饿汉单例模式是绝对线程安全的,因为在线程还没有出现的时候就初始化了。第一种写法:pu

2021-08-21 21:47:59 263

原创 一文带你看懂工厂模式

大家好我是mihotel,今天来总结一下设计模式中的工厂模式,在平时编程中,构建对象最常用的方式是 new 一个对象。乍一看这种做法没什么不好,而实际上这也属于一种硬编码。每 new 一个对象,相当于客户端多知道了一个类,增加了类与类之间的联系,不利于程序的松耦合。我们可以利用工厂模式封装对象的生产过程。简单工厂模式首先是简单工厂模式,它是通过指定一个工厂对象来创建产品实例,只需要传给工厂参数,不需要关系对象是怎样产生的.举个例子:如果我们要录制Java和Python两门课程,我们可以先创建ICou.

2021-08-08 22:02:12 200

原创 [MyBatis]动态SQL

动态SQL参考链接:https://mybatis.org/mybatis-3/zh/dynamic-sql.html概念动态Sql就是动态的拼接Sql语句,MyBatis使动态Sql变得容易,只需要编写XML涉及的标签if通过if标签可以动态的拼接where语句<select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’

2021-06-21 11:32:38 114

原创 git笔记

Git基础每次提交Git都会创建所有文件的快照 ,并创建一个commit对象,commit对象中有指向文件快照的指针。Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。已修改表示修改了文件,但还没保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。已提交表示数据已经安全地保存在本地数据库中。这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。基本

2021-06-07 10:47:36 233

原创 [leetCode]781. 森林中的兔子

贪心如果两只兔子的回答一样,则他们属于同一种颜色,否则他们的颜色不同。将回答一样的兔子进行分组,假设x只兔子回答y,那么至少有 ceil(x / (y+1))种颜色,每种颜色至少有 (y + 1)只,至少有 ceil(x / (y+1)) * (y + 1)只兔子。向上取整可以这样计算:x / n = (x + n) / nclass Solution { public int numRabbits(int[] answers) { Map<Integer, Int.

2021-04-04 09:31:53 115

原创 [leetCode]191. 位1的个数

题目https://leetcode-cn.com/problems/number-of-1-bits/位运算利用位运算的性质,使用n & (n - 1)即可将n的二进制表示的最右边的1消为0.public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0; while

2021-03-22 10:27:53 83

原创 [leetCode]331. 验证二叉树的前序序列化

题目https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/栈如果为数字则消耗一个插槽增加两个插槽,如果为空节点则消耗一个插槽,判断最后栈是否为空,为空则为有效序列。class Solution { public boolean isValidSerialization(String preorder) { int len = preorder.length();

2021-03-12 09:20:10 146

原创 [leetCode]227. 基本计算器 II

题目https://leetcode-cn.com/problems/basic-calculator-ii/递归class Solution { public int calculate(String s) { if (s == null || s.length() == 0) return 0; int len = s.length(); int res = 0; int num = 0; LinkedL

2021-03-11 11:29:30 99

原创 [leetCode]132. 分割回文串 II

题目https://leetcode-cn.com/problems/palindrome-partitioning-ii/动态规化需要进行两次动态规化,第一次动态规化计算f[i][j],也就是s[i, j]是否是回文串。第二次动态规化设置g[i]代表s[0, i]的最小分割次数,如果s[0, i]是回文串,则g[i] = 0, 如果不是回文串则 g[i] = g[j] + 1, 0 < j < i, s[j +1,i]是回文串。class Solution { pub

2021-03-08 10:31:45 82

原创 [leetCode]338. 比特位计数

题目https://leetcode-cn.com/problems/counting-bits/直接计算class Solution { public int[] countBits(int num) { int[] ans = new int[num + 1]; for (int i = 0; i <= num; i++) { ans[i] = getOneBits(i); } retur

2021-03-03 09:52:32 107

原创 [leetCode]395. 至少有 K 个重复字符的最长子串

题目https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters/滑动窗口题目要求最长子串,最长子串中字符的种类数在[1,26]的左闭右闭的范围内。遍历所有种类数,在符合每种种类数中的字符串中寻找最长子串。还需要维护窗口内每个字符的出现频次,以及窗口内频次小于k的字符数量less,如果less>0这当前字符串及其子串肯定不是最长的字符子串。class Solution {

2021-02-27 13:35:59 175

原创 [leetCode]1178. 猜字谜

题目https://leetcode-cn.com/problems/number-of-valid-words-for-each-puzzle/字典树class Solution { TrieNode root; public List<Integer> findNumOfValidWords(String[] words, String[] puzzles) { root = new TrieNode(); for (String

2021-02-26 12:53:54 175 2

原创 [leetCode]995. K 连续位的最小翻转次数

题目https://leetcode-cn.com/problems/minimum-number-of-k-consecutive-bit-flips/差分数组最简单的贪心思路就是从左往右遍历数组,如果当前位置A[i]为0 则需要翻转[i, i + K - 1]之间的元素,不断执行这个操作加入最终数组全为1则执行的翻转次数就是最少的。由上面的思路可以知道,如果当前位置A[i]=0则需要翻转,那么如果我们知道了当前位置的翻转次数是偶数并且A[i]为0的话我们就需要翻转一次数组,因此可以利用差分

2021-02-18 11:12:57 113

原创 [leetCode]566. 重塑矩阵

题目https://leetcode-cn.com/problems/reshape-the-matrix/模拟填充重塑数组的一行填充满后换一行继续填充class Solution { public int[][] matrixReshape(int[][] nums, int r, int c) { int rows = nums.length; int cols = nums[0].length; if (rows * cols !=

2021-02-17 09:51:53 98

原创 [leetCode]561. 数组拆分 I

题目https://leetcode-cn.com/problems/array-partition-i/贪心可以发现要使每一对数的最小值最大,那么这一对数越**“靠近”**越好,所以直接排序两对两对的取求和即可。由于已经排序了所以最小值就是每队的第一个数。class Solution { // 1 2 2 5 6 6 public int arrayPairSum(int[] nums) { Arrays.sort(nums); int sum

2021-02-16 10:31:58 107

原创 [leetCode]485. 最大连续1的个数

题目https://leetcode-cn.com/problems/max-consecutive-ones/滑动窗口class Solution { public int findMaxConsecutiveOnes(int[] nums) { int len = nums.length; int left = 0; int right = 0; int maxOneCnt = 0; while (rig

2021-02-15 08:33:47 118

原创 [leetCode]765. 情侣牵手

题目https://leetcode-cn.com/problems/couples-holding-hands/并查集阅读题目通过感觉可以知道是考察并查集,并查集并不难写,难得是题目得分析。通过举几个例子可以发现,最少得交换次数等于交换完成之后得连通分量个数减去交换之前的连通分量个数。class Solution { public int minSwapsCouples(int[] row) { int len = row.length; int N

2021-02-14 20:11:31 81

原创 [leetCode]448. 找到所有数组中消失的数字

题目https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/解法将原数组当作哈希表,由于数组中的数字大小都在[1, n]内,数组的长度为n,所以遍历数组元素x,将nums[x - 1]加上n,如果数组中没有元素缺失的话数组每个位置元素的值都应该大于n,如果有缺失元素的话,缺失元素对应位置的元素值是不大于n的,这样就能找到数组中的缺失元素。class Solution { public List&

2021-02-13 09:19:41 81

原创 [leetCode]224. 基本计算器

题目https://leetcode-cn.com/problems/basic-calculator/栈class Solution { public int calculate(String s) { int operand = 0; // 操作数 int sign = 1; // 符号 int result = 0; // 计算结果 Stack<Integer> stack = new Stack<&

2021-02-10 13:30:32 90

原创 [leetCode]71. 简化路径

题目https://leetcode-cn.com/problems/simplify-path/栈以斜杠将字符串分隔,将分割后的字符串加入栈中,遇到 ".“和”“无需入栈遇到”…"则需要弹栈,弹栈需要注意不能溢出。最后通过StringBuilder重新构建字符串。class Solution { public String simplifyPath(String path) { String[] dirs = path.split("/"); Dequ

2021-02-09 10:12:16 87

原创 [leetCode]992. K 个不同整数的子数组

题目https://leetcode-cn.com/problems/subarrays-with-k-different-integers/滑动窗口此题的问法和很多滑动窗口的题目问法类似但还是有些不同,题目中问的是恰好有K个不同整数的区间数量,而一般滑动窗口问的问题是最多。。。。可以将问题转化为最多有K个整数的区间数量,这样的区间数量就是right - left,那么恰好有K个不同整数的区间数量就等于最多有K个整数的区间数量减去最多有K-1个整数的区间数量。class Solution {

2021-02-09 09:08:07 103

原创 [leetCode]978. 最长湍流子数组

题目https://leetcode-cn.com/problems/longest-turbulent-subarray/动态规化class Solution { public int maxTurbulenceSize(int[] arr) { int n = arr.length; if (n < 2) return n; int[] increased = new int[n]; int

2021-02-08 09:16:56 141

原创 [leetCode]5. 最长回文子串

题目https://leetcode-cn.com/problems/longest-palindromic-substring/动态规化状态表示:dp[i][j]: s[i…j]是否是回文子串状态计算:if i == j : dp[i][j] = trueelif i + 1 == j : dp[i][j] = s[i] == s[j]else : dp[i][j] = s[i] == s[j] && dp[i + 1][j - 1]class Solution {

2021-02-06 15:51:07 80

原创 [leetCode]1423. 可获得的最大点数

题目https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/滑动窗空思路:要从两边取k个元素使之和最大,也就是取连续n-k个元素使之和最小,因此可以使用滑动窗口class Solution { public int maxScore(int[] cardPoints, int k) { int n = cardPoints.length; int windowS

2021-02-06 09:07:57 89

原创 [leetCode]1208. 尽可能使字符串相等

题目https://leetcode-cn.com/problems/get-equal-substrings-within-budget/思路字符串s与t每一个对应字符的开销为∣s[i]−s[t]∣| s[i] - s[t] |∣s[i]−s[t]∣因此可以构建一个diff数组其中diff[i]=∣s[i]−s[t]∣diff[i] = | s[i]-s[t] |diff[i]=∣s[i]−s[t]∣,这样问题就转化成了在diff数组中求区间和不超过maxCost的最长区间长度。滑动窗口

2021-02-05 12:28:22 155

原创 [leetCode]1248. 统计「优美子数组」

题目https://leetcode-cn.com/problems/count-number-of-nice-subarrays/滑动窗口使用双指针维护一个逻辑意义上的窗口区间为[left, right)。随着右指针的移动统计窗口内的奇数个数,如果奇数个数为k了,这时候再统计与当前窗口相关的子串的个数,可以这样统计:计算算窗口内最右侧奇数右边有几个偶数,用rightEvenCnt表示,也就是说有几种选择结尾的方式,由于可以什么偶数都不选所以一共有 rightEvenCnt + 1 种结尾方

2021-02-04 21:32:46 135

原创 [leetCode]336. 回文对

题目https://leetcode-cn.com/problems/palindrome-pairs/前缀树两个字符串 s1、s2 要构成回文串可以分成三种情况讨论:情况1: s1.length = s2.length在这种情况下s1翻转之后就是s2情况2:s1.length < s2.length, 例如 :s1 = “as”, s2 = “llsa” \ “sall”这种情况 s2能被分成 t1 + t2,其中t1是回文串, t2 是s1的翻转,也有可能t2是回文串,t1

2021-02-04 13:53:05 104

原创 [leetCode]643. 子数组最大平均数 I

题目https://leetcode-cn.com/problems/maximum-average-subarray-i/滑动窗口使用前缀和来快速计算一个区间内的和,从而可以计算平均数。class Solution { public double findMaxAverage(int[] nums, int k) { int n = nums.length; int[] sum = new int[n + 1]; for (int i

2021-02-04 08:10:16 129

原创 [leetCode]421. 数组中两个数的最大异或值

题目https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/哈希表class Solution { public int findMaximumXOR(int[] nums) { int maxNum = Arrays.stream(nums).max().getAsInt(); // 最大数字的位数 int L = Integer.toBinarySt

2021-02-03 21:57:05 115

原创 [leetCode]642. 设计搜索自动补全系统

题目前缀树class AutocompleteSystem { private StringBuilder haveInput; private List<Pair<String, Integer>> ans; public AutocompleteSystem(String[] sentences, int[] times) { haveInput = new StringBuilder(); ans = new

2021-02-03 20:02:57 194

原创 [leetCode]1004. 最大连续1的个数 III

题目https://leetcode-cn.com/problems/max-consecutive-ones-iii/滑动窗口解法与第424题相同class Solution { public int longestOnes(int[] A, int K) { int n = A.length; int maxCount = 0; int left = 0, right = 0; while (right < n)

2021-02-03 14:06:23 99

原创 [leetCode] 295. 数据流的中位数

题目https://leetcode-cn.com/problems/find-median-from-data-stream/双优先队列写法一class MedianFinder { private PriorityQueue<Integer> small; private PriorityQueue<Integer> large; private int smallSize, largeSize; /** initialize y

2021-02-03 13:18:09 66

原创 [leetCode]480. 滑动窗口中位数

题目https://leetcode-cn.com/problems/sliding-window-median/双优先队列加延迟删除由于要得到一个窗口内的中位数,可以使用两个优先队列small(大顶堆)、large(小顶堆),一个维护窗口内元数排序后较小的一半,一个维护较大的一半,如果元素个数为奇数那个中位数为small的堆顶元素,如果元素个数为偶数那么中位数就是small与large的堆顶元素除以2,此题的难点在于怎样保持两个堆的元素数量各占一半。一开始将元素加入small中,如果smal

2021-02-03 13:05:45 128

原创 【数据结构】前缀树

前缀树的定义前缀树是N叉树的特殊形式,用于存储字符串。前缀树的每个节点代表一个字符串/前缀。每个节点拥有几个子节点,子节点的值由该结点的值和通往该节点路径上所有的字符组成。特性: 节点的后代都与该节点相关的字符串具有相同的前缀。前缀树的表示底层使用输出存储子节点当需要存储的字符串中只有a-z的字符时可以使用数组存储子节点,通过 c - ‘a’ 来访问子节点。class TrieNode { // 改变这个值来适应不同的情况 public static final i

2021-02-02 15:41:06 287

原创 [leetCode]424. 替换后的最长重复字符

题目https://leetcode-cn.com/problems/longest-repeating-character-replacement/滑动窗扣使用双指针维护一个逻辑上的窗口,当 窗口的长度小于等于 窗口内出现最多的字符的数量 + k 时,窗口内的字符替换小于等于k次后能变为同样的字符。因此一开始不断移动右指针,维护窗口内最多的字符数量,如果不能满足right - left > maxCount + k说明替换k次无法使窗口内字符全部一样,这时候就需要移动左指针,下面代码使用

2021-02-02 11:42:26 90

原创 [leetCode]1438. 绝对差不超过限制的最长连续子数组

题目https://leetcode-cn.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/滑动窗口使用双指针维护窗口移动,使用TreeMap或者双端队列来维护窗口中得最大值和最小值TreeMapclass Solution { public int longestSubarray(int[] nums, int limit) { int n

2021-02-01 11:27:52 147

ListViewTest2.zip

在自定义Adapter中 - 重写getItemViewType()方法用来判断当前Item对象的类别 - 重写getViewTypeCount()返回item一共有几个类别 - 在geView方法中通过判断类别来填充不同的item布局并给控件设置值

2019-08-22

空空如也

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

TA关注的人

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