自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(312)
  • 资源 (2)
  • 收藏
  • 关注

原创 10. 正则表达式匹配(动态规划)

package com.mt.wsq.lc.dp;/** * 10. 正则表达式匹配 * * @author wangshiqiang03 * @date 2021/8/13 * * https://leetcode-cn.com/problems/regular-expression-matching/ */public class IsMatch { /** * 整体思想:化整为零,采用逐个位置进行匹配 * 定义状态:那些是变化的值,这道题很明显就是s和p

2021-08-13 22:47:27 265

原创 二进制运算常用操作

二进制基本知识

2021-08-05 10:24:45 278

原创 合并k个已排序的链表(分治、优先队列)

package com.heu.wsq.niuke.top200;import java.util.ArrayList;import java.util.Comparator;import java.util.PriorityQueue;/** * 合并k个已排序的链表 * @author wsq * @date 2021/6/2 * 描述 * 合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。 * 示例1 * 输入: * [{1,2,3},{4,

2021-06-03 22:39:06 318 1

原创 foreach 循环里进行元素的 remove操作

如果要进行remove操作,可以调用迭代器的 remove 方法而不是集合类的 remove 方法。因为如果列表在任何时间从结构上修改创建迭代器之后,以任何方式除非通过迭代器自身remove/add方法,迭代器都将抛出一个ConcurrentModificationException,这就是单线程状态下产生的 fail-fast 机制。正例public class ModList { public static void main(String[] args) { List&.

2021-06-03 17:06:10 4735

原创 在旋转过的有序数组中寻找目标值

package com.heu.wsq.niuke.top200;/** * 在旋转过的有序数组中寻找目标值 * @author wsq * @date 2021/6/1 * 描述 * 给定一个整数数组nums,按升序排序,数组中的元素各不相同。 * nums数组在传递给search函数之前,会在预先未知的某个下标 t(0 <= t <= nums.length-1)上进行旋转,让数组变为[nums[t], nums[t+1], ..., nums[nums.length-1],

2021-06-01 21:56:55 324

原创 最长递增子序列(动态规划+二分查找)

package com.heu.wsq.niuke.top200;/** * 最长递增子序列 * @author wsq * @date 2021/6/1 * 描述 * 给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的) * * 示例1 * 输入: * [2,1,5,3,6,4,8,9,7] * 返回值: * [1,3,4,8,9] * * 示例2 * 输入: * [1,2,8,6,4] * 返

2021-06-01 20:39:13 296

原创 最长回文子串(矩阵型动态规划)

package com.heu.wsq.leetcode.a1star;/** * 最长回文子串 * @author wsq * @date 2021/5/27 * 给你一个字符串 s,找到 s 中最长的回文子串。 * * 示例 1: * 输入:s = "babad" * 输出:"bab" * 解释:"aba" 同样是符合题意的答案。 * * 示例 2: * 输入:s = "cbbd" * 输出:"bb" * * 链接:https://leetcode-cn.com/lee

2021-05-27 11:02:06 157

原创 剑指 Offer 04. 二维数组中的查找

package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 04. 二维数组中的查找 * @author wsq * @date 2021/5/27 * 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序, * 每一列都按照从上到下递增的顺序排序。请完成一个高效的函数, * 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 * * 示例: * 现有矩阵 matrix 如下: * [ * [1, 4,

2021-05-27 10:02:33 89

原创 堆排序(大顶堆、小顶堆)

package com.heu.wsq.basic.sort_algorithm;import java.util.Arrays;/** * 堆排序 * @author wsq * @date 2021/5/27 */public class HeapSort { /** * 堆排序的思想主要有下面两步: * 1. 将无需数组构建成堆的状态(从小到大(大顶堆),从大到小(小顶堆)) * 2. 将堆顶与数组末尾元素交换,然后下沉调整堆顶,重新构建堆状态

2021-05-27 09:30:57 276

原创 5765. 跳跃游戏 VII(动态规划+前缀和优化)

package com.heu.wsq.leetcode.zhousai.so3;/** * 5765. 跳跃游戏 VII * @author wsq * @date 2021/5/23 * 给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。一开始,你在下标 0 处,且该位置的值一定为 '0' 。当同时满足如下条件时,你可以从下标 i 移动到下标 j 处: * i + minJump <= j <= min(i + maxJump, s.

2021-05-23 15:10:55 158

原创 redis基本类型对象编码

字符串对象对象编码方式有三种:int: 当值为小的整数值,使用long类型存储embstr:值为简短的字节数组(同样也是SDS,仅调用一次内存分配函数,分配的连续空间,空间中包含redisObject和sdshdr)raw:底层采用SDS字符串存储(调用两次内存分配函数,分配给redisObject和sdshdr)编码变更:列表对象对象编码方式有三种:ziplist:列表中所有字符串元素的长度小于64;元素的数量小于512个,使用ziplistlinkedlist:当ziplis

2021-05-15 21:43:22 244

原创 链表中的节点每k个一组反转(递归,链表反转)

package com.heu.wsq.niuke.top200;/** * 链表中的节点每k个一组反转 * @author wsq * @date 2021/05/14 * * 题目描述 * 将给出的链表中的节点每k个一组翻转,返回翻转后的链表 * 如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样 * 你不能更改节点中的值,只能更改节点本身。 * 要求空间复杂度 O(1) * * 例如: * 给定的链表是1→2→3→4→5 * 对于k=2, 你应该返回 2→1→4→3

2021-05-14 19:38:38 295

原创 面试题 05.01. 插入(位运算)

package com.heu.wsq.leetcode.interview_book;/** * 面试题 05.01. 插入 * @author wsq * @date 2021/5/13 * 给定两个整型数字 N 与 M,以及表示比特位置的 i 与 j(i <= j,且从 0 位开始计算)。 * 编写一种方法,使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域,不足之处用 0 补齐。 * 具体插入过程如图所示。 * 题目保证从 i 位到 j 位足以容纳 M

2021-05-13 09:29:36 117

原创 1310. 子数组异或查询(前缀和思想)

package com.heu.wsq.leetcode.prefix_sum;/** * 1310. 子数组异或查询 * @author wsq * @date 2021/5/12 * 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 * 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor ... xor arr[Ri])作为本次查询的结果。 * 并返回一

2021-05-12 19:02:50 120

原创 TOP K问题(大顶堆、分治思想)

package com.heu.wsq.niuke.top200;import java.util.ArrayList;import java.util.Comparator;import java.util.PriorityQueue;/** * TOP K问题 * @author wsq * @date 2021/5/8 * 题目描述 * 给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组

2021-05-08 15:22:19 282

原创 设计LRU缓存结构

package com.heu.wsq.niuke.top200;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 设计LRU缓存结构 * @author wsq * @date 2021/5/8 * 设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能 * set(key, value):将记录(key, va

2021-05-08 14:02:09 90

原创 面试题 08.06. 汉诺塔问题

package com.heu.wsq.leetcode.interview_book;import java.util.List;/** * 面试题 08.06. 汉诺塔问题 * @author wsq * @date 2021/5/6 * 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: * (1) 每次只能移动一个盘子; * (

2021-05-06 23:04:57 131

原创 删除链表中倒数第N个节点(快慢双指针)

package com.heu.wsq.niuke.top200;/** * 删除链表中倒数第N个节点 * @author wsq * @date 2021/5/5 * 题目描述 * 给定一个链表,删除链表的倒数第 nn 个节点并返回链表的头指针 * 例如, * 给出的链表为: 1\to 2\to 3\to 4\to 51→2→3→4→5, n= 2n=2. * 删除了链表的倒数第 nn 个节点之后,链表变为1\to 2\to 3\to 51→2→3→5. * * 备注: * 题

2021-05-05 19:14:40 72

原创 面试题 16.07. 最大数值(位运算)

package com.heu.wsq.leetcode.interview_book;/** * 面试题 16.07. 最大数值 * @author wsq * @date 2021/5/4 * 编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 * * 示例: * 输入: a = 1, b = 2 * 输出: 2 */public class Maximum { public int maximum(int a, int b){

2021-05-04 17:19:52 100

原创 633. 平方数之和(双指针)

package com.heu.wsq.leetcode.double_point;/** * 633. 平方数之和 * @author wsq * @date 2021/4/28 * 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。 * * 示例 1: * 输入:c = 5 * 输出:true * 解释:1 * 1 + 2 * 2 = 5 * * 示例 2: * 输入:c = 3 * 输出:false * * 链接:https:

2021-04-28 21:27:36 111

原创 Java集合总结

集合扩容机制ArrayList:扩容为原来数组长度的1.5倍,如果1.5倍小于所需的长度,则直接扩容到所需容量的大小。HashMap:默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍(保证容量为2的幂次方)。HashTable:默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashSet、TreeSet、LinkedHashSet的区别HashSet 是 Set 接⼝的主要实现类 , HashSet 的底层是 HashMap ,线程不安全的,可以存储 nul

2021-04-27 16:21:16 69

原创 1011. 在 D 天内送达包裹的能力

package com.heu.wsq.leetcode.binarysearch;/** * 1011. 在 D 天内送达包裹的能力 * @author wsq * @date 2021/4/26 * 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。 * 传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 * 返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。 * *

2021-04-26 22:48:02 91

原创 875. 爱吃香蕉的珂珂(二分查找)

二分搜索只能用来查找元素吗?参考下面这篇文章:二分搜索只能查找元素么?当问题是在一个值有序的空间域中,获取一个满足条件的值,我们都可以考虑使用二分查找的方法,进行剪治去做,每次排除一半的搜索空间。package com.heu.wsq.leetcode.binarysearch;/** * 875. 爱吃香蕉的珂珂 * @author wsq * @date 2021/4/26 * 珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 .

2021-04-26 15:31:22 169

原创 397 · 最长上升连续子序列(动态规划)

package com.heu.wsq.leetcode.dp;/** * 397 · 最长上升连续子序列 * @author wsq * @date 2021/4/25 * 描述 * 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。) * * 样例 * * 样例 1: * 输入:[5, 4, 2, 1, 3] * 输出:4 * 解释:

2021-04-25 23:12:08 278

原创 460 · 在排序数组中找最接近的K个数(二分查找 + 线性扫描)

package com.heu.wsq.leetcode.binarysearch;/** * 460 · 在排序数组中找最接近的K个数 * @author wsq * @date 2021/4/24 * * 描述 * 给一个目标数 target, 一个非负整数 k, 一个按照升序排列的数组 A。 * 在A中找与target最接近的k个整数。返回这k个数并按照与target的接近程度从小到大排序,如果接近程度相当,那么小的数排在前面。 * * 1. k是一个非负整数,并且总是小于已排序

2021-04-24 16:24:23 328

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I(二分查找)

package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 53 - I. 在排序数组中查找数字 I * @author wsq * @date 2021/4/24 * 统计一个数字在排序数组中出现的次数。 * * 示例 1: * 输入: nums = [5,7,7,8,8,10], target = 8 * 输出: 2 * * 示例 2: * 输入: nums = [5,7,7,8,8,10], target = 6 * 输出: 0

2021-04-24 15:43:31 93

原创 368. 最大整除子集(动态规划)

package com.heu.wsq.leetcode.dp;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 368. 最大整除子集 * @author wsq * @date 2021/4/23 * 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:

2021-04-23 18:52:43 156

原创 363. 矩形区域不超过 K 的最大数值和(二维前缀和,区域面积)

package com.heu.wsq.leetcode.prefix_sum;/** * 363. 矩形区域不超过 K 的最大数值和 * @author wsq * @date 2021/4/22 * 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 * 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 * * 示例 1: * 输入:matrix = [[1,0,1],[0,-2,3]], k = 2 * 输出

2021-04-22 20:44:02 136

原创 1897 · 会议室 3(区间判重和最大重叠区间问题)

package com.heu.wsq.leetcode.interval;import java.util.*;/** * 1897 · 会议室 3 * @author wsq * @date 2021/4/20 * 描述 * 你有一个当前会议列表intervals,里面表明了每个会议的开始和结束时间,以及一些会议室rooms。现在有一系列会议ask需要加入,逐个判断他们能否被安排进当前的会议列表中而不产生冲突。一个会议室在同一时间只能进行一场会议。每个询问都相互独立。 * Ensur

2021-04-20 21:22:25 416

原创 1353. 最多可以参加的会议数目(贪心算法)

package com.heu.wsq.leetcode.interval;import java.util.Arrays;import java.util.Comparator;import java.util.PriorityQueue;/** * 1353. 最多可以参加的会议数目 * @author wsq * @date 2021/4/20 * 给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 start

2021-04-20 21:10:37 466

原创 28. 实现 strStr(KMP算法,公共子串的位置)

package com.heu.wsq.leetcode.kmp;/** * 28. 实现 strStr() * @author wsq * @date 2021/4/20 * 实现 strStr() 函数。 * 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。 * 说明: * 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题

2021-04-20 13:45:31 106

原创 快速排序

package com.heu.wsq.basic.sort_algorithm;import com.sun.xml.internal.bind.v2.model.annotation.Quick;/** * 快速排序 * @author wsq * @date 2021/4/17 * 快速排序的思想:通过一趟排序将记录分隔为独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分 * 记录继续进行排序,以达到整个序列有序。 * * 快速排序使用分治法把一个串(

2021-04-18 15:52:02 82

原创 归并排序

package com.heu.wsq.basic.sort_algorithm;/** * 归并排序 * @author wsq * @date 2021/4/16 * 归并排序是建立在归并操作上的一种有效的排序算法。 * 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 * 将已有序的子序列合并,得到完全有序的序列; * 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 * * 算法描述: * 1. 把长度

2021-04-16 21:57:08 62

原创 希尔排序

package com.heu.wsq.basic.sort_algorithm;/** * 希尔排序 * @author wsq * @date 2021/4/16 * 希尔排序(Shell sort)是基于插入排序的快速排序算法,第一个打破O(n2)的排序算法 * 对于大规模乱序数组插入排序很慢,因为它总是需要交换相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端。 * 希尔排序会优先比较距离较远的元素。交换不相邻的元素以对数组的局部进行排,最终使用插入排序将局部有序的数组排序。

2021-04-16 21:37:09 82

原创 插入排序

package com.heu.wsq.basic.sort_algorithm;/** * 插入排序 * @author wsq * @date 2021/4/16 * 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 * * 算法描述: * 1. 从第一个元素开始,该元素可以认为已经被排序; * 2. 取出下一个元素,在当前索引左边是已经排序的元素序列,从后向前

2021-04-16 21:11:20 71

原创 选择排序

package com.heu.wsq.basic.sort_algorithm;/** * 选择排序 * @author wsq * @date 2021/4/16 * 选择排序(Selection-sort)是一种简单直观的排序算法。 * 首先,找到数组中最小的那个元素,其次将它和数组的第一个元素交换位置。 * 再次,再从第二个元素开始寻找最小的那个元素,然后将它与数组的第二个元素交换位置 * ... * 同理。 * * 选择排序的两个特点: * 1. 运行时间和输入无关(纵使

2021-04-16 20:45:38 122

原创 冒泡排序

package com.heu.wsq.basic.sort_algorithm;/** * 冒泡排序 * @author wsq * @date 2021/4/16 * 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 * * 算法描述 * 1. 比较相邻的元素。如果第一个比第二个大,

2021-04-16 20:27:04 94

原创 87. 扰乱字符串(动态规划)

package com.heu.wsq.leetcode.dp;import java.util.HashMap;import java.util.Map;/** * 87. 扰乱字符串 * @author wsq * @date 2021/4/16 * 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : * 如果字符串的长度为 1 ,算法停止 * 如果字符串的长度 > 1 ,执行下述步骤: * 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,

2021-04-16 19:50:04 128

原创 213. 打家劫舍 II(动态规划)

package com.heu.wsq.leetcode.dp;/** * 213. 打家劫舍 II * @author wsq * @date 2021/4/15 * 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 * 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,

2021-04-15 22:24:55 109

原创 剑指 Offer 17. 打印从1到最大的n位数(大数情况,数字类型表示不下时)

package com.heu.wsq.leetcode.inoffer;import java.util.ArrayList;import java.util.List;/** * 剑指 Offer 17. 打印从1到最大的n位数 * @author wsq * @date 2020/12/7 * 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 * * 示例 1: * * 输入: n = 1 *

2021-04-14 22:59:58 79

工控安全态势感知 .pptx

ppt是研究生阶段的一篇关于工业控制安全方面上态势感知所发挥的作用,主要从四部分讲起 1.工控概述及发展 2.工控通信网络及危机 3.工控态势感知的应用 4.研究前景

2019-10-27

EA企业版(带注册码)

需求分析设计,UML建模技术能够帮助我们更好的解决这些问题,EA12企业版带注册码,可以轻松完成用例图、时序图、流程图、类图等,

2017-11-20

空空如也

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

TA关注的人

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