自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hjyp的博客

记录我的学习过程

  • 博客(31)
  • 收藏
  • 关注

原创 LeetCode 地图分析

题目题目链接思路这道题的大意是对于每一个海洋区域,求出它到陆地的最短距离,然后取求出的这些距离的最大值;可以遍历地图中的每一个元素,如果是海洋,则去找它到最近陆地的距离;如果是陆地,则不用管;如何去找海洋到陆地的最短距离,可以用BFS的思想,借助队列实现;在BFS的过程中,如果需要知道一个元素是在第几次被遍历的,可以用一个变量cnt记录,每次查看当前队列中的元素个数,这些元素一定是上一...

2020-03-30 14:36:25 306

原创 《算法笔记》 最大公约数,最小公倍数,素数,分数运算,质因数分解,大数加减法

目录辗转相除法求最大公约数求最小公倍数分数的加减乘除辗转相除法求最大公约数递归表达式:gcd(a, b) = gcd(b, a % b);递归结束条件:b == 0, 0与任何数的最大公约数是这个数本身;#include <iostream>#include<string.h>#include<cmath>#include<stdlib.h...

2020-03-30 11:58:56 204

原创 《算法笔记》随机选择算法

目录找到第K大的数找到第K大的数思想:借助于快速排序的randPartition()函数,随机选择一个数,以它为主元将序列划分为两个子区间;如果K 大于此主元的下标,说明第K大的元素在右区间,则递归寻找右子区间;如果K 小于此主元的下标,说明第K大的元素在座区间,则递归寻找左子区间;#include <iostream>#include<string.h>...

2020-03-29 10:23:35 257

原创 《算法笔记》二分查找

目录二分查找(非递归实现)二分查找(递归实现)查找第一个大于目标值元素的下标大于目标值的第一个元素下标在一个有序数组中查找满足任意条件的第一个元素二分法的应用二分查找(非递归实现)二分查找的前提是有序,并且每次查找的范围都是闭区间#include <iostream>#include<string.h>#include <algorithm>usi...

2020-03-28 12:38:30 167

原创 《算法笔记》贪心算法

理论知识贪心是用来解决一类最优化问题,并希望由局部最优策略来推得全局最优结果的算法思想;贪心算法适用的问题一定满足最优子结构问题,即一个问题的最优解可以由他的子问题的最优解有效的构造出来。开区间贪心问题每次选取最晚的开始时间或者每次选取最早的结束时间#include <iostream>#include<string.h>#include <algor...

2020-03-26 12:02:05 288

原创 《算法笔记》递归和分治

目录求斐波那契数列(递归)求全排列(分治)八皇后问题(暴力枚举法)八皇后问题(回溯算法)求斐波那契数列(递归)#include <iostream>#include<vector>#include<string.h>using namespace std;int F(int a){ //递归结束条件 if(a == 0 || a ==...

2020-03-26 11:10:40 143

原创 《算法笔记》 排序

目录排序排名的实现整数散列字符串hash初步排序选择排序 :选择排序是从前往后排,每次选取待排序区间的最小值与目标值交换,待排序区间是闭区间插入排序:插入排序也是从前往后排,每次从后往前枚举已有序部分来确认插入位置//选择排序 for(int i = 0; i < cnt; i++) { int k = i; //k记录未排序区间最小值的下标 ...

2020-03-26 09:55:10 145

原创 《算法笔记》系列一

基本数据类型int: 绝对值在10^9范围以内的整数,%d;long long : 绝对值在0 ~ 10^18以内的整数,超过10^10 就要用long long 了;float : 有效精度 6 ~ 7 位;double: 有效精度 15 ~ 16 位;scanf和printf函数1.scanf对其他格式符的输入是以空白符为结束判断标志的,%s 以回车或空格作为结束符,只有 %c ...

2020-03-24 17:35:26 129

原创 2020.3.24

最近看了一些别人学习算法的方法,我觉得最好的方法还是认真用一本书系统的学习一下,不能老是像个无头苍蝇一样刷题,虽然也有用,但是效果甚微;所以我决定在接下来的一年时间里系统的学习一下算法;初期目标是先跟着胡凡的《算法笔记》刷一下PAT的题,最好在6月份之前刷完PAT甲级真题;之后可以看刘汝佳《算法竞赛入门》;考虑到考研,每天拿出两个小时学习这些东西,就当是复习数据结构了;加油啊!!!...

2020-03-24 10:39:57 100 2

原创 LeetCode 按摩师

题目题目链接思路首先这道题是一道动态规划题目,那么我们来找一下状态转移方程;动态规划一般要将问题分成小问题,解出来小问题后再利用小问题的解去解大问题;那么这道题的子问题就是将数据量变小,先解只有一个元素,然后两个,三个.....;对于每个子问题,考虑末尾元素只有取和不取两种可能,如果取末尾元素,那么前一个元素必然不能取;如果不取末尾元素,那么前一个元素可以取,也可以不取;代码c...

2020-03-24 10:29:09 239

原创 PAT (甲级)1023 Have Fun with Numbers (20point(s))

题目题目链接思路题目的大意是给你一个最长不超过20位的十进制整数,问这个数乘2后每个字符出现的次数是否一样;因为longlong int最多接受19位,故必须得自己用数组存了;首先,对于测试数据,从末尾开始遍历,遍历的同时要干这些事情:1.将这个字符出现的次数统计出来;2.这个字符乘2加上上一次的进位就是结果的对应位置数字的大小;感想又双缀缀来做pat了,自己加油啊,奥利给!!!...

2020-03-20 11:56:40 139

原创 LeetCode 409. 最长回文串

题目题目链接思路签到题:先把每个字母出现的次数统计一下,然后依次遍历每个字母;如果当前字母的数量为偶数,则总数应加上这个字母出现的次数;如果当前字母的数量为奇数,则总数加上这个字母出现的次数-1;并设置flag为true,代表有奇数次的字母,最后输出时需要加一。知识点A和z间还有其他的非字母字符,不要忘记代码class Solution {public: int ...

2020-03-19 15:59:37 76

原创 LeetCode 1372. 二叉树中的最长交错路径

题目题目链接思路这道题由于每个节点的选择与上一节点相关,所以肯定要传入多个参数;从上到下递归解决,如果这个节点是左子树,那么只能看右子树;如果这个节点是右子树,那么只能看左子树;(以后遇到当前节点与上一节点状态有关的递归过程时,肯定要传入多个参数)代码/** * Definition for a binary tree node. * struct TreeNode { * ...

2020-03-17 16:59:47 101

原创 LeetCode 1370. 上升下降字符串

题目题目链接思路先把字符串中每个字母出现频率统计出来,然后从前往后,从后往前开始遍历。代码class Solution {public: string sortString(string s) { int arr[26], maxIdx = 0; string ans; memset(arr, 0, sizeof(arr));...

2020-03-17 16:49:11 172

原创 LeetCode 54. 螺旋矩阵

题目题目链接思路单纯的模拟一下就可以了,用两个数分别记录一下已经输出过的行数和列数代码class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> ans; if(matr...

2020-03-17 16:44:08 100

原创 LeetCode 1013. 将数组分成相等的三个部分

题目题目链接思路1.先看整个数组和是不是3的倍数2.在找到和为总和三分之一的位置;以及和为三分之二的位置,复杂度O(n)代码class Solution {public: bool canThreePartsEqualSum(vector<int>& A) { int sum = 0, part1 = 0; for(int...

2020-03-17 16:38:40 122

原创 LeetCode 543.二叉树的直径

题目题目链接思路这道题让求二叉树的直径,其实就是找一条通过节点数最多的路径;那么我们还是可以自底向上求解,考虑每个节点,如果当前节点在一条路径上,那么这条路径的最多节点数 = 当前节点左子树的最大深度 + 当前节点右子树的最大深度 + 1;结束条件是叶节点的左右数都是零;代码class Solution {public: int ans; int depth(Tre...

2020-03-17 16:31:01 66

原创 LeetCode 1376.通知所有员工所需的时间

题目链接题目链接题目大意意思就是给一颗树,每个节点向他的下一层节点传递消息都需要时间,问根节点传递到叶节点所用的时间;思路:先把这棵树放到一个二维表中,每一行代表一个节点,这一行存放他有哪些孩子节点;递归地自底向上去计算每一层通知到叶节点所用的时间;因为对于一个节点来说,有多种路径走向叶节点,则选取最大值就是最后的结果;代码class Solution {public: /...

2020-03-17 16:19:28 264

原创 LeetCode 543.Diameter of Binary Tree

题目题目链接思路题目给一个二叉树,让找出一条经过节点数最多的路径,节点数-1称为这棵树的直径;我们可以发现,对于每一个节点,如果最长路径经过这个节点,那么这条路径经过的节点数目 = 其左子树的深度 + 其右子树的深度 + 1(自身);那么我们就可以定义depth函数来求出以每个节点为根时的深度;全局保存一个变量,用来存放经过的节点数,答案就是节点数-1。代码/** * De...

2020-03-10 16:23:29 80

原创 LeetCode 5354.通知所有员工所需的时间

题目题目链接思路这个题首先需要将员工与上级的关系存到一个二维数组中;然后自顶向下递归调用calculate()函数,这个函数的作用是计算一个节点通知到其所有下属的时间;代码class Solution {public: //calculate()函数用来计算某一节点通知其所有下属所用的时间 int calculateTime(vector<vector<i...

2020-03-09 12:16:19 120

原创 LeetCode 5353. 灯泡开关 |||

题目题目链接思路给你一个数列,让找到目标数,目标数要求满足比他小的所有数都出现在其左侧,问这样的数有多少个?我们通过一次遍历数组,记录当前值往左数列的最大数,如果最大数等于当前值的下标,则满足题意。代码class Solution {public: int numTimesAllBlue(vector<int>& light) { //ma...

2020-03-09 12:05:53 172 1

原创 Java的util包,及集合框架

1.日期与时间类主要有Calender类,Data类,Calendar类是抽象类,不能实例化,但可以调用方法import java.util.Calendar;public class Main{ public static void main(String[] args) { Calendar today = Calendar.getInstance(); ...

2020-03-08 11:38:38 239

原创 包装类

1.主要的包装类(为了方便不同类型数据间的转化)基本数据类型包装类基本数据类型包装类booleanBooleanbyteByteshortShortintIntegerlongLongcharCharacterfloatFloatdoubleDouble2.数值包装类与字符串的转化public class Main{ ...

2020-03-06 17:18:11 98

原创 Object类

Object类Object类是其他所有类的超类,无论是系统中已定义的类还是用户自定义的类均继承了Object类,因此,Object类中定义的方法适用于所有的类。1.toString方法返回描述对象的一个字符串,一般我们会重写这个方法。2.equals方法如果调用对象与指定对象引用同一实例,则返回true,否则返回false;实际使用中,我们会重写这个方法,用来判断两个对象的值是否...

2020-03-06 16:32:19 142

原创 异常

1.异常的分类Error类和Exception类用于处理Java中的错误,他们都继承自Throwable类。Throwable类又继承自object类。Exception异常类是所有异常类的父类,他有一个重要的子类RuntimeException,这个子类包括所有常见的运行时异常。如算数异常,数字格式异常,数组索引越界异常,空指针异常等。异常名称说明Excepti...

2020-03-05 17:36:56 88

原创 Leetcode 994.腐烂的的橘子

题目题目链接思路利用队列进行BFS,我这里用了两种方法,第一种方法借用了一个外部数组,用来存储节点是在第几次侵染时被染成坏橘子的,这样当一个好橘子将被染成坏橘子时,只需要找到侵染源,然后加1就可以了,坏处是占内存,耗时;第二种方法是先得到队列中元素的数量,就是上一次侵染所感染的总数,直接循环这么多次就可以了;代码typedef pair<int,int> pr;cl...

2020-03-05 15:10:55 134

原创 接口相关知识点

概述Java中不允许一个类同时继承多个类,故而引入接口。接口是在程序的设计阶段被写来专门用于被继承的。接口存在的意义也就是被继承,被重定义里面的方法。接口的定义与类定义相似,关键字是interface;可以把接口理解为特殊的抽象类,在接口中只提供方法的声明,不提供方法的实现,每个包含接口的类必须实现所有的方法。规则*接口中的方法默认都是抽象方法,抽象方法不允许有方法体,方法前面的...

2020-03-03 17:00:16 259

原创 多态

多态的分类多态可以分为编译时多态(方法的重载)和 运行时多态(方法的重定义)方法重载*由参数列表的不同来区分的同名方法,称为重载方法;*最精确匹配原则:若找不到参数列表完全匹配的方法, 则寻找由小到大执行隐式类型转换后可匹配的第一个方法;*向上转型原则:子类对象可以转型为父类类型的对象,反之不成立;方法重定义父类和子类都有相同的方法,子类的函数进行了重定义;注意:*返回类型...

2020-03-03 16:15:25 104

原创 各种关键字详解(static,this,abstract,final)

1.static修饰变量:静态变量,只有一个存储位置,由所有类的对象共享,牵一发动全身修饰方法:

2020-03-03 15:55:16 247

原创 类和对象,访问控制,构造方法详解

1.类与对象的概念 标识符其实是一个对象的引用,类是对象的抽象和归纳,对象是类的实例2.类的成员 类的数据成员会自动默认初始化3.java 中引用和值传递Java中参数传递即使是使用引用类型,都会等同于值传递;可以通过数组来进行地址传值例子注意:下面的例子并不会交换值int i=0,j=0; try{ //构建一个输入对象,类似于c...

2020-03-02 15:15:25 96

原创 PAT(甲级)1017 Queueing at Bank

题目题目链接思路先把每个客户来的时间化为以秒为单位的时间,按从小到大的顺序排序;对于每个窗口,记录每次服务的结束时间,初始结束都为8:00;依次处理排序后的每个客户,处理过程为:先循环一下所有的窗口,找到结束时间最早的窗口,,记录其下标;如果客户来的时间早于最早结束的窗口时间,则会产生等待时间;如果客户来的时间晚于最早结束的窗口时间,不会产生等待时间;代码#include &lt...

2020-03-01 12:07:51 72

空空如也

空空如也

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

TA关注的人

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