- 博客(47)
- 资源 (2)
- 收藏
- 关注
原创 并查集——带你手撕出代码,循序渐进,逐步优化
1.介绍:在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(Union-find Algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(Union-find Data Structure)或合并-查找集合(Merge-find Set)。为了更
2020-07-08 21:47:34
242
原创 【快排分区算法,大顶堆】215. 数组中的第K个最大元素
题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例:思想:优先队列的思路是很朴素的。因为第 K 大元素,其实就是整个数组排序以后后半部分最小的那个元素。因此,我们可以维护一个有 K 个元素的最小堆:1、如果当前堆不满,直接添加;2、堆满的时候,如果新读到的数小于等于堆顶,肯定不是我们要找的元素,只有新都到的数大于堆顶的时候,才将堆顶拿出,然后放入新读到的数,进而让堆自己去调整内部结构。方法二: 利用快
2020-06-30 00:05:38
3434
原创 【原地算法】41. 缺失的第一个正数
问题:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。例子:思路1. 我们将数组中所有小于等于 00 的数修改为 N+1N+1;2.我们遍历数组中的每一个数 xx,它可能已经被打了标记,因此原本对应的数为 |x|,其中 ∣∣ 为绝对值符号。如果 ∣x∣∈[1,N],那么我们给数组中的第 |x| - 1 个位置的数添加一个负号。注意如果它已经有负号,不需要重复添加;3.在遍历完成之后,如果数组中的每一个数都是负数,那么答案是 N+1,否则答案是第一个正数的位置加 11。
2020-06-27 22:55:40
171
原创 Clion debug不输出内容 | Clion debug输出乱码
解决方法:这张图,你能看到的UTF-8 的地方,全部修改成UTF-8。这个勾也勾上,跟第一张图片同步,那个main.cpp不用管还是乱码:setbuf(stdout, NULL);在你的main函数里加上这句话。
2020-06-11 18:09:52
1741
1
原创 指针常量与常量指针区别 绝对能理解
问题引出:根据const修饰既可以修饰值,又可以修饰指针分为如下情况:①const int p; //p就是个常量,这个很熟悉②const int *p;③int const *p;④int * const p;⑤const int * const p;⑥int const * const p;怎么读?遇到const读作常量遇到*读作指针记忆特性技巧const 在*p之前代表 *p是个常量,*p不可修改const只是在p之前代表p是个常量,p不可修改示例根据怎么读的
2020-05-19 17:57:13
516
原创 2020蓝桥杯模拟赛题目(Java版本)
第一题 单位变换题目【问题描述】在计算机存储中,15.125GB是多少MB?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。思路1G=1024M第二题 约数个数/*【问题描述】1200000有多少个约数(只计算正约数)。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本...
2020-05-10 10:24:15
1282
1
转载 C++提高编程
C++提高编程本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用1 模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性例如生活中的模板一寸照片模板:[图片(img-TbE7UCPw-1588825921116)(assets/1547105026929.png)]PPT模板:[图片(img-wOf1XJPG-1588825921119)(as...
2020-05-07 12:32:58
173
转载 C++核心编程
C++核心编程本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:...
2020-05-07 12:31:00
274
转载 C++基础入门
C++基础入门1 C++初识1.1 第一个C++程序编写一个C++程序总共分为4个步骤创建项目创建文件编写代码运行程序1.1.1 创建项目 Visual Studio是我们用来编写C++程序的主要工具,我们先将它打开[图片(img-eXA5anYc-1588824991726)(assets/1541383178746.png)][图片(img-GqwXl7LA-15...
2020-05-07 12:27:56
311
转载 C++课程安排
C++课程安排明确C++课程学习阶段以及课程内容阶段内容目标案例第一阶段C++基础语法入门对C++有初步了解,能够有基础编程能力通讯录管理系统第二阶段C++核心编程介绍C++面向对象编程,为大型项目做铺垫职工管理系统第三阶段C++提高编程介绍C++泛型编程思想,以及STL的基本使用演讲比赛系统综合大案例:机房预约系...
2020-05-07 12:16:09
524
原创 算法学习之路(八)—— 算法时间复杂度分析
T(n) = 2T(n-1) + O(1) ,那么时间复杂度就是O(2^n)T(n) = T(n-1)+T(n-2)+O(1) ,那么时间复杂度就是O(2^n)若规模n没1次减为原来规模的一半,那么时间复杂度为O(lgn),没2次减半,则为O(2lgn) …以此类推T(n) = T(n-1) + O(1) ,那么时间复杂度就是O(n)...
2020-05-02 13:48:51
934
原创 算法学习之路(七)——算法基础
数组求和(练习递归)方法一:import java.util.*;class Main { static int f(int[] a, int begin, int end) { if (begin >= end) return 0; int x = f(a, begin + 1, end); return x + a[begi...
2020-05-02 13:43:56
1426
原创 算法学习之路(六)——位操作
位操作(Bit Manipulation)是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。位操作包括:¬¬ 取反(NOT)~∩∩ 按位或(OR) |⊕⊕ 按位异或(XOR) ^∪∪ 按位与(AND) &...
2020-05-01 13:01:04
240
原创 算法学习之路(五)——IO类的总结
之前内容:算法学习之路(一)—— File算法学习之路(二)—— 字节算法学习之路(三)——字符算法学习之路(四)——缓冲区1. 总结:1.InputStream、OutputStream处理字节流的抽象类InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.OutputStream是字节输出流的所有类的超类,一般我们使...
2020-04-30 19:45:48
304
原创 算法学习之路(四)——缓冲区
之前内容:算法学习之路(一)—— File算法学习之路(二)—— 字节算法学习之路(三)——字符1. 字节缓冲区1.1 字节缓冲输出流BufferedOutputStream1.2 字节缓冲输入流BufferedInputStream2. 字符字符缓冲输出流BufferedIWriter字符缓冲输出流BufferedIReader...
2020-04-30 18:29:34
494
原创 算法学习之路(三)——字符
之前内容:算法学习之路(一)—— File算法学习之路(二)—— 字节1. 字符输出流Writerimport java.io.*;public class Main { public static void main(String[] args) throws Exception { String path ="D:\\java\\git\\repos...
2020-04-30 01:59:49
151
原创 算法学习之路(二)—— 字节
之前内容:算法学习之路(一)—— File先说: Output是往文件里写Input是读取文件1. 字节字节输出流OutputStreampublic class Main { public static void main(String[] args) throws Exception { OutputStream os = new FileOutp...
2020-04-30 01:40:37
290
原创 算法学习之路(一)—— File
这是用于记录我学习算法过程中产生的代码。1. Filewindows的文件路径分隔符为分号 “ ; ” ,linux的文件路径分隔符为冒号“ :”windows的文件名称分隔符为反斜杠 “ \” ,linux的文件路径分隔符为正斜杠“ / ” 在编程的时候,有无反斜杠是一个转义字符, 所以要使用2个\\ 代表一个普通的 \File的静态成员变量 File.path...
2020-04-30 00:52:24
223
原创 这一整套题下来,还怕面试?
一整套题下来,还怕面试?上链接:https://www.educative.io/courses/grokking-the-coding-interview?aff=K7qB我自己也补充了一些比较重要的模式和经典算法,自行按类型找题,后期会再更新下面我们就来看看的分类及每个类型的经典题目:1. Introduction 大概就是说这是帮助你进入顶级公司的一套课程,学习之前, 需要具...
2020-04-28 23:16:13
470
原创 【位运算,异或】“只出现一次的数字” 的一类问题解决方法
问题的题目全部来自leetcode,题号已给出异或的性质两个数字异或的结果a^b是将 a 和 b 的二进制每一位进行运算,得出的数字。 运算的逻辑是如果同一位的数字相同则为 0,不同则为 1异或的规律1.任何数和本身异或则为02.任何数和 0 异或是本身3.异或满足交换律。 即 a ^ b ^ c ,等价于 a ^ c ^ b注意交换律136. 只出现一次的数字cla...
2020-04-28 13:12:59
298
原创 【二分搜索】33. 搜索旋转排序数组
思路: 二分搜索如果 [l, mid - 1]是有序数组,且target 的大小满足 ( nums[l], nums[right] )则我们应该将搜索范围缩小至 [l, mid - 1],否则在 [mid + 1, r] 中寻找。如果 [mid, r] 是有序数组,且 target 的大小满足 ( nums[mid+1],nums[r] ),则我们应该将搜索范围缩小至 [mid + ...
2020-04-27 13:24:27
97
原创 [递归,模拟]55. 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。方法一:递归class Solution { public boolean canJump(int[] nums) { return helper(nums,nums.length - 1); } private bo...
2020-04-17 13:01:00
238
原创 【蓝桥杯2016第七届比赛题目】JAVA A组
1 煤球数目有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),…如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。2 生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在...
2020-04-11 12:28:52
220
原创 【API】151. 翻转字符串里的单词
问题描述给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格, 但是反转后的字符不能包括。示例 3:输入: "a good exampl...
2020-04-10 12:27:31
114
原创 【dfs,回溯】22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]非回溯法:放到参数中,每次新建字符串import org.w3c.dom.html.HTMLHeadElement;import ja...
2020-04-09 13:00:21
142
原创 【栈】1111. 有效括号的嵌套深度
思路:维护一个栈 s,从左至右遍历括号字符串中的每一个字符:如果当前字符是(,就把 ( 压入栈中,此时这个 (的嵌套深度为栈的高度;如果当前字符是),此时这个) 的嵌套深度为栈的高度,随后再从栈中弹出一个(。下面给出了括号序列 (()(())()) 在每一个字符处的嵌套深度:括号序列 ( ( ) ( ( ) ) ( ) )下标编号 0 1 2 3 4 5 6 7 8 9嵌套...
2020-04-01 12:53:18
151
原创 【基本排序重要思想】912. 排序数组
问题描述: 给你一个整数数组nums,将该数组升序排列。使用API就没多大的意义了。方法一: 快速排序的实现注意: 快速排序的边界情况还是比较烦人的,注意分情况,而且最后交换的时候一定是和right这个位置交换。import java.util.Arrays;class Solution { public int[] sortArray(int[] nums) { ...
2020-03-31 13:10:30
141
原创 【开源】Java算法学习过程笔记和源代码分享
首先,我是使用Java编写的源程序再者,我想谈谈,很多学Java的人不注重算法的学习。光学学SSM,SpringBoot,SpringCloud等是不够的。比如,很多面试的第一场就是考你算法,这一关都过不了,你能力施展的余地都没有。其次,我想说,我跟很多人一样,开始对使用Java来写算法都是很迷茫的,甚至无从下手。不过,这个东西又很重要。所以,一个成体系的学习过程是非常重要的。我走过很多弯路,...
2020-03-31 00:20:43
190
原创 【bfs,动态规划,Dijkstra】1162. 地图分析
你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用0和1 标记好了。其中0代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是|x0 - x1| + ...
2020-03-29 13:07:26
166
原创 【Trie】820. 单词的压缩编码
方法一:存储后缀思路如果单词X 是 Y的后缀,那么单词 X 就不需要考虑了,因为编码 Y 的时候就同时将 X编码了。例如,如果 words 中同时有 "me"和 "time",我们就可以在不改变答案的情况下不考虑 "me"。如果单词 Y不在任何别的单词X 的后缀中出现,那么 Y 一定是编码字符串的一部分。因此,目标就是保留所有不是其他单词后缀的单词,最后的结果就是这些单词长度加一的总和,...
2020-03-28 13:06:24
107
原创 【蓝桥杯,几何问题】试题 基础练习 矩形面积交
实现代码:import java.util.Map;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double x1 = 0, y1 = 0, ...
2020-03-27 13:16:05
304
原创 【简单逻辑题】892. 三维形体的表面积
在N * N的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v个正方体叠放在对应单元格(i, j)上。请你返回最终形体的表面积。**思路:**计算每个位置的表面积,然后相加。其中计算每个位置的面积为 grid[i][j] - inner - outer,inner的意思是内部重叠面积,计算公式为 2 * (n - 1) ,outer代表与外...
2020-03-25 12:32:06
165
原创 [dp/贪心]435. 无重叠区间-----经典问题
无重叠区间是一类十分经典的问题,很多问题的模型就是基于这一就无重叠区间问题的。首先,一个很直接的思路就是这类题目和LIS(最长上升子序列问题)很像。所以考虑使用动态规划来解这道题import java.util.Arrays;import java.util.Comparator;class Solution { public int eraseOverlapInterval...
2020-03-24 19:24:20
159
原创 【dp】Leetcode面试题 17.16. 按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。暴力法:对于每个预约都有可选和可不选的两种情况记忆型递归:暴力法的问题在于有很多重复的子问题,可以使用记忆型递归的方式大大提高效率动态规划:dp数组的含义:dp[x]代表在[0…...
2020-03-24 18:23:18
166
原创 [dp]Leetcode.376.摆动序列
状态的定义:dp[i] 代表以下标为i结尾的最大摆动序列因为这里涉及到正负还有0所以使用up[i] 存的是目前为止最长的以第 i 个元素结尾的上升摆动序列的长度。类似的, down[i] 记录的是目前为止最长的以第 i 个元素结尾的下降摆动序列的长度。我们每当找到将第 i 个元素作为上升摆动序列的尾部的时候就更新 up[i] 。现在我们考虑如何更新 up[i] ,我们需要考虑前面所有的降...
2020-03-22 18:35:01
143
原创 leetcode 945 使数组唯一的最小增量
参考了,leetcode官方题解的方法,使用计数的方式算法首先统计出每个数出现的次数,然后从小到大遍历每个数 x:如果 x 出现了两次以上,就将额外出现的数记录下来(例如保存到一个列表中);如果 x 没有出现过,那么在记录下来的数中选取一个 v,将它增加到 x,需要进行的操作次数为x - v。我们还可以对该算法进行优化,使得我们不需要将额外出现的数记录下来。还是以 [1, 1, 1, ...
2020-03-22 13:03:58
110
原创 Leetcode 365.水壶问题
有明确的初始状态和最终状态可以使用BFS来解决,主要考虑下一步可能状态next的求解,是个体力活import java.util.*;class Solution { private int x; private int y; private HashSet<String> status = new HashSet<>(); ...
2020-03-21 16:08:51
168
原创 Leetcode 面试题40. 最小的k个数
直接使用API函数调用快速排序,面试种肯定是不行的!利用快速排序的分区思想,我们知道快排的划分函数每次执行完后都能将数组分成两个部分,小于等于分界值 pivot 的元素的都会被放到数组的左边,大于的都会被放到数组的右边,然后返回分界值的下标pos。那么:如果pos = k 直接返回pos<k 对左边再次分区,因为正好第k大的数一定再左边,我们要找到它pos<k对左边再次分...
2020-03-20 13:37:13
101
原创 Leetcode 494. 目标和
给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 +和-。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数S 的所有添加符号的方法数。dp数组的含义: dp[i][j] 表示用数组中的前 i 个元素,组成和为 j 的方案数状态转移方程:dp[i][j] = dp[i - 1][j - num...
2020-03-17 20:10:14
183
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人