自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(168)
  • 收藏
  • 关注

原创 LeetCode-738

738. 单调递增的数字给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)Example input N = 10 output 9 input N = 1232 output 1229

2020-12-16 00:28:48 794

原创 LeetCode-49

49. 字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。Example input ["eat", "tea", "tan", "ate", "nat", "bat"] output [    ["ate","eat","tea"],    ["nat","tan"],    ["ba

2020-12-14 15:10:17 187

原创 LeetCode-217

217. 存在重复元素给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。Example input [1,2,3,4] output false input [1,1,1,3,3,4,3,2,4,2] output true Note无思路没啥意义的水

2020-12-13 00:18:34 159

原创 LeetCode-376

376. 摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5][1,7,4,9,2,5][1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5][1,4,7,2,5][1,4,7,2,5] 和 [1,7,4,5,5][1,7,4,5,5][1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前

2020-12-12 00:38:53 170

原创 LeetCode-649

649. Dota2 参议院Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利:如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。给定一个字符串代表每个参

2020-12-11 01:43:03 88

原创 LeetCode-860

860. 柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。Example input [5,5,5,10,20] output

2020-12-10 01:20:07 104

原创 LeetCode-62

62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?Examle input m = 3, n = 2 output 3 input m = 7, n = 3

2020-12-09 08:50:37 368

原创 LeetCode-842

842. 将数组拆分成斐波那契序列给定一个数字字符串 S,比如 S = “123456579”,我们可以将它分成斐波那契式的序列 [123, 456, 579]。形式上,斐波那契式序列是一个非负整数列表 F,且满足:0<=F[i]<=231−10 <= F[i] <= 2^{31} - 10<=F[i]<=231−1,(也就是说,每个整数都符合 32 位有符号整数类型);F.length>=3F.length >= 3F.length>=3;

2020-12-08 14:31:33 143

原创 建图

建图链式前向星struct node{ int next,to,w; node(){} node(int a,int b,int c):next(a),to(b),w(c){}}G[mx];int head[mx];int tot;void init()//初始化{ tot=0; memeset(head,-1,sizeof(head));}void add(int u,int v, int w)//加边,这里是单向边{ G[tot]=node(head

2020-12-06 14:47:18 109

原创 素数筛

质数筛

2020-12-06 13:48:10 74

原创 C++实用函数

C++实用函数lower_bound用法:lower_bound(起始位置,结束位置,数值val)作用:返回区间中第一个大于或等于val的元素地址注意点:1. 区间是左闭右开2. 前提是有序数组(或者这一区间有序)3. 如果所有元素都小于val,则返回结束地址(越界)//找到数组中第一个大于或等于10的元素下标int m = lower_bound(s.begin(), s.end(), 10) - s.begin();upper_bound用法:upper_bound(起始

2020-12-03 00:45:00 185

原创 进制哈希

进制哈希针对字符串类型,将其转化为整型,就可以实现O(1)的查询。思想和二进制思想是类似的。把每一个字符串转换成数字,这个值是base进制的。可以处理很多问题(十分方便)实现typedef unsigned long long ull;//对于字符串s,进行哈希处理base = 131;//进制h[0]=0;//hash数组p[0]=1;//pow数组//实现进制哈希for(int i=1;i<=n;i++){ h[i]=(h[i-1]*base + s[i]-'

2020-12-01 00:15:25 303

原创 哈希算法

哈希表百度百科:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。特点:s...

2020-11-30 22:24:30 219

原创 LeetCode-29

29. 两数相除给定两个整数,被除数 dividenddividenddividend 和除数 divisordivisordivisor。将两数相除,要求不使用乘法、除法和 modmodmod 运算符。返回被除数 dividenddividenddividend 除以除数 divisordivisordivisor 得到的商。整数除法的结果应当截去(truncate)(truncate)(truncate)其小数部分,例如:truncate(8.345)=8truncate(8.345) = 8tr

2020-11-30 19:36:47 111

原创 状态压缩

状态压缩概念:当状态维数很多,但总量很少时,可以将状态压缩为一个数来记录方法:大部分时间需要将数字转化为2进制数,用数组来保存。常用操作判断一个数字x二进制下第i位是不是等于1。方法:if(((1<<(i−1))&x)>0)将1左移i-1位,相当于制造了一个只有第i位上是1,其他位上都是0的二进制数。然后与x做与运算,如果结果>0,说明x第i位上是1,反之则是0。将一个数字x二进制下第i位更改成1。方法:x=x|(1<<(i−1))证明

2020-11-30 14:40:09 386

原创 堆排序

堆排序以最大堆为例思想(关键点)最大堆中的最大元素值出现在根结点(堆顶)堆中每个父节点的元素值都大于等于其孩子结点建堆:从最下面的父亲节点开始建堆,直至根节点新来一个节点:将其放在叶子节点,并且按照它这边父亲节点一路向上判断交换堆排序过程:把最大堆堆顶的最大数取出,将剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个结束代码建堆void heapify(int *arr,int n, int k){ int largest = k;

2020-11-25 13:31:48 96

原创 LeetCode-242

242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

2020-11-23 00:47:39 82

原创 LeetCode-452

452. 用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xendx_{start},x_{end}xstart​,xend​, 且满足 xstart≤x≤xendx_{start} ≤ x ≤ x_{end}

2020-11-23 00:43:06 96

原创 归并排序算法

归并排序算法

2020-11-22 00:17:28 107

原创 LeetCode-148

148. 排序链表给你链表的头结点 head ,请将其按升序排列并返回 排序后的链表 。Example input head = [4,2,1,3] output [1,2,3,4] input head = [-1,5,3,4,0] output [-1,0,3,4,5] Note在 O(nlogn)O(n log n)O(nlogn) 时间复

2020-11-22 00:16:36 79

原创 快速排序算法

快速排序算法思想选择数组中一个数xxx进行比较,小于等于xxx的放在前面,大于xxx的放在后面这样可以形成 “小于等于xxx的”+xxx +“大于xxx的” 的数组再对两端进行递归该操作,直到数组长度为1不同于归并排序,这个是从上到下,进行分解排序过程可看这个快速排序过程代码void quickSort(int *arr, int begin, int end){ if(begin >= end) return; int temp = arr[

2020-11-21 00:00:49 52

原创 LeetCode-28

28. 实现 strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。Example input haystack = "hello", needle = "ll" output 2 input haystack = "aaaa

2020-11-19 23:38:45 225

原创 KMP算法

KMP算法主要说明两个思路点1.next数组的引入"字符串匹配的时候,不想一直从头开始"比如对于字符串:                            ababacdefababacdefababacdef                 下标:012345

2020-11-19 22:59:10 78 1

原创 二叉树的遍历

二叉树的遍历前序遍历中序遍历后序遍历深度优先搜索广度优先搜索Morris前序遍历Morris中序遍历Morris后序遍历为了便于理解各种遍历顺序,以下面二叉树为例进行遍历C/C++二叉树:struct node{ int val; node *left; node *right; node(int x):val(x),left(NULL),right(NULL){}};Python二叉树:class node: def __init__(slef, x):

2020-10-24 10:59:38 109

原创 Python中的数据结构

写在前言python可以用deque,list以及其它等等来实现数据结构,本文只针对算法中常用到的Python实现栈和队列栈list实现(推荐)stack = list() #stack = []一样的stack.append(1) #入栈操作a = stack.pop() #出栈操作,并返回栈顶元素if stack == []:

2020-10-24 10:46:13 144

原创 LeetCode-27

27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。Example input nums = [3,2,2,3], val = 3 output 2 input nums =

2020-10-19 23:15:33 78

原创 LeetCode-26

26. 删除排序数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。Example input nums = [1,1,2] output 2 input nums = [0,0,1,1,1,2,2,3,3,4] out

2020-10-19 23:08:07 205

原创 LeetCode-25

25. K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。Example input 1->2->3->4->5,k=2 output 2->1->4->3->5 input 1->2->3

2020-10-19 22:30:12 120

原创 LeetCode-23

23. 合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。Example input lists = [[1,4,5],[1,3,4],[2,6]] output [1,1,2,3,4,4,5,6] input lists = [] output [] input

2020-10-19 15:26:32 98

原创 位运算

位运算用了很都次,但每次都要网上查,所以记录一下(以后翻自己博客 )基本用法符号描述运算规则&与两个位数值都为1时取1,否则为0|或两个位数值都为0时取0,否则为1^异或两个位数值不相等时取1,否则为0~取反0变成1,1变成0<<左移二进制数向左移一位,低位补0,高位超范围则去掉>>右移二进制数向右移一位,低位去掉巧妙用法做题遇到就记录…...

2020-10-17 10:59:01 80

原创 猴子补丁

monkey patch作用:在运行期间动态修改一个类或模块。看下面一个实例:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def mergeKLists(self, lists: List[ListNode]

2020-10-17 10:49:10 94

原创 LeetCode-22

22. 括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。Example input n = 3 output [ "((()))", "(()())", "(())()", "()(())", "()()()" ] Note无思路递归解决问题,具体见代码思路来自之前检查“

2020-10-14 17:33:41 118

原创 LeetCode-24

24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。Example input head = [1,2,3,4] output [2,1,4,3] input head = [1] output [1] Note链表中节点的数目在范围 [0, 100]

2020-10-14 17:18:38 134

原创 LeetCode-1002

1002. 查找常用字符给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。Example input ["bella","label","roller"] output ["e","l","l"] input ["c

2020-10-14 17:12:00 111

原创 LeetCode-21

21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。Example input 1->2->4, 1->3->4 output 1->1->2->3->4->4 Note无思路因为两个链表已经是有序了,合并的话,每次判断两个链头,选择数值小的作为新的链头即可代码如下# Definition for

2020-10-13 11:02:11 67

原创 LeetCode-20

20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。Example input "()[]{}" output true input "(]" output false input

2020-10-13 10:27:50 61

原创 LeetCode-19

19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。Example input 1->2->3->4->5n = 2 output 1->2->3->5. Note给定的 n 保证是有效的。思路:很巧妙,自己没有想到= =很容易想到通过递归来解决问题,关键在于每次判断什么,该做什么操作由于题目是需要删除倒数第n个结点,所以遇到.

2020-10-13 10:21:22 264

原创 LeetCode-18

18. 四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。Example input nums = [1, 0, -1, 0, -2, 2], target = 0。 output [ [-1, 0, 0, 1], [-2, -1, 1, 2],

2020-10-13 09:44:25 108

原创 LeetCode-17

17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。Example input "23" output ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. Note尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路标准dfsdfsd

2020-10-13 09:40:38 78

原创 LeetCode-16

16. 最接近的三数之和给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。Example input nums = [-1,2,1,-4], target = 1 output 2 Note样例中与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。3<=nums.

2020-10-13 09:28:48 143

空空如也

空空如也

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

TA关注的人

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