自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 34 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], targ...

2019-12-28 17:04:52 131 1

原创 leetcode 35 搜索插入位置(二分查找)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0算法思路如下:...

2019-12-28 16:28:57 189

原创 二分查找的递归和非递归实现

已知一个排序数组A,如A = [-1,2,5,20,90,100,207,800]另外一个乱序数组B,如B = [50,90,3,-1,207,80]求B中的任意某个元素,是否在A中出现,结果储存在数组C中,出现用1表示,未出现用0表示,如,C = [0,1,0,1,1,0]二分查找又称折半查找,首先,假设表中元素是按升序排列,将中间位置的关键字与查找关键字比较:1、如果两者相等,则查找成...

2019-12-28 16:07:46 252

原创 leetcode 315 计算右侧小于当前元素的个数(分治算法/二叉排序树)

已知两个已排序数组,将这两个数组合并为一个排序数组void merge_sort_two_vec(vector<int>& sub_vec1, vector<int>& sub_vec2, vector<int>& vec) { int i = 0; int j = 0; while (i < sub_vec1.size()...

2019-12-27 16:15:55 418

原创 leetcode 51 N皇后问题(递归+回溯的思想)

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入: 4输出: [[".Q…", // 解法 1“…Q”,“Q…”,“…Q....

2019-12-27 00:48:05 346

原创 leetcode 22 生成括号(递归、回溯)

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路:n组括号,括号字符串长度为2*n,字符串中的每个字符有两种选择可能,“(”或者“)”,故有2^2n种可能例如2组括号,所有的组合可能为16种,在这16种可能...

2019-12-25 20:52:33 282

原创 leetcode 40 组合数之和II(递归树结构的剪枝)

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1,...

2019-12-24 18:08:24 207

原创 leetcode 90 子集II(递归+sort+set)

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]有两种重复原因:1、不同位置的元素组成的集合是同一个子集,顺序相同:例如:[2,1,2,2]选择第1,2,3个元素组成的子集:[2,1,2];选择第1,2,4...

2019-12-24 17:01:08 156

原创 leetcode 78 子集I(递归+回溯/位运算)

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1],[2], [1,2,3],[1,3],[2,3],[1,2],[]]思路:在所有子集中,生成各个子集,即是否选择[1],是否选择[2],是否选择[3]的问题如果只使用循环,困难的地方在哪里?使用循环难以直接...

2019-12-24 16:05:12 196

原创 heap(堆)和stack(栈)的区分

静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。栈内存用来保存定义在函数内的非static对象。分配在静态或栈内存中的对象由编译器自己创建和销毁对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销毁除了静态内存和栈内存,每个程序还有一个内存池。这部分内存被称作自由空间(free store)或堆(heap)。程序...

2019-12-23 20:20:36 177

原创 POJ 2431 最优加油方法(贪心算法+堆结构)

题目描述:已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加油站到终点的距离d与各个加油站可以加油的量 l,起点位置至终点的距离L与起始时刻油箱中汽油量P;假设使用1个单位的汽油即走一个单位的距离,油箱没有上线,最少加几次油,可以从起点开至终点?(如果无法到达,返回-1)思考:汽车经过n个加油站,对于这n个加油站,应该在哪个加油站停下来加油,最终既能到达终点,又使加油次...

2019-12-23 19:56:30 448

原创 leetcode 452 用最少数量的箭引爆气球(贪心算法+pair)

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

2019-12-23 17:33:22 112

原创 leetcode 45 跳跃游戏2(贪心算法)

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。思路:该题是leedcode 55 跳跃游戏的变形题...

2019-12-23 16:12:27 483

原创 leetcode 55 跳跃游戏(贪心算法)

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达...

2019-12-23 15:41:23 377 5

原创 leetcode 402 移掉K位数字(贪心算法)

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = “1432219”, k = 3输出: “1219”解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = “10200”, k ...

2019-12-23 00:33:52 250

原创 leetcode 376 摆动序列(贪心算法)

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

2019-12-22 23:04:46 329

原创 leetcode 455 分发饼干(贪心算法)

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小...

2019-12-22 22:02:59 138

原创 C++_智能指针的基本原理

智能指针的核心思想是将资源(内存)与指针对象的生命周期绑定起来,创建对象的同时立即为其分配资源,对象销毁时立即释放资源。1、智能指针和资源的绑定将裸指针和它相关的操作封装成一个类,并在创建对象时必定要调用的构造函数中,分别进行资源的分配和释操作。当然,为了保证对象的操作方式看起来与裸指针相同,这个封装类起码还要重载operator->和operator *一个简单的,在其生命周期中绑定...

2019-12-22 17:30:21 235

原创 无返回值函数(void和return;)

参考资料:C++_Primer 5th没有返回值的return语句只能用在返回类型是void的函数中。返回void的函数不要求非得有return语句,因为在这类函数的最后一句后面会隐式执行return.通常情况下,void函数如果想在它的中间位置提前退出,可以使用return语句。return的这种用法有点类似于我们用的break语句退出循环。void swap(int &v1, i...

2019-12-20 15:41:49 15075 4

原创 leetcode 295 数据流的中位数(最大堆与最小堆)

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)...

2019-12-20 15:28:23 436

原创 leetcode 215 数组中第K个最大元素(堆排或or快排)

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路1:将数组number先排序,然后再...

2019-12-20 13:52:39 198

原创 leetcode 82 删除排序链表中的重复元素(双指针or递归调用)

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3解法1:双指针定位class Solution {public: Lis...

2019-12-20 10:17:30 117

原创 leetcode 224 基本计算器

实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。示例 1:输入: “1 + 1”输出: 2示例 2:输入: " 2-1 + 2 "输出: 3示例 3:输入: “(1+(4+5+2)-3)+(6+8)”输出: 23采用双栈法,设立一个数据栈和一个操作符栈,在遍历字符串的过程中,如果一个...

2019-12-20 09:07:15 119

转载 C++中inline笔记

转载百度百科inline词条inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字,而不是一种“用于声明”的关键字。1.in...

2019-12-19 17:37:53 121

原创 poj 1363 判断栈序列是否合法

已知从1到n的数字序列,按顺序入栈,每个数字入栈后即可出栈,也可在栈中停留,等待后面的数字入栈出栈后,该数字再出栈,求该数字序列的出栈序列是否合法比如:3 2 5 4 1 合法序列3 1 2 4 5 不合法序列因为1肯定比2先入栈,所以1不可能比2先出栈思路:为了测试出栈序列是否正确,将元素按顺序入栈,进行模拟,如果能够用栈模拟出出栈次序,说明序列正确使用栈与队列模拟入栈、出栈过程1...

2019-12-19 14:51:51 321 1

原创 leetcode 155 最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minS...

2019-12-19 13:07:45 163

原创 leetcode 232 用栈实现队列

使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); ...

2019-12-19 11:59:55 87

原创 leetcode 225 用队列实现栈

使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque...

2019-12-19 11:34:12 81

原创 leetcode 142 环形链表II

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:...

2019-12-19 00:47:02 111

原创 leetcode 141 环形链表

给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解...

2019-12-19 00:41:31 88

原创 leetcode 160 相交链表

编写一个程序,找到两个单链表相交的起始节点。思路1,使用set求交集1、遍历链表A,将A中节点对应的指针地址,插入set2、遍历链表B,将B中节点对应的指针(地址),在set中查找,发现在set中的第一个节点地址,即是两个链表的交点class Solution {public: ListNode* getIntersectionNode(ListNode* headA, ListNod...

2019-12-19 00:32:00 155

原创 leetcode 92 反转链表II

Reverse a linked list from position m to n.Do it in one - passNote: 1 ≤ m ≤ n ≤ length of list.Example :Input : 1->2->3->4->5->NULL, m = 2, n = 4Output : 1->4->3->2->5-&...

2019-12-19 00:27:28 116

原创 leetcode 206 反转链表I

Example:Input: 1->2->3->4->5->NULLOutput : 5->4->3->2->1->NULLFollow up :A linked list can be reversed either iteratively or recursively.Could you implement both ?下面...

2019-12-19 00:25:35 98

原创 leetcode 83 删除链表中的重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3解法1:采用单指针在leedcode中测试12ms/** * Definition for singly-linked list. * struc...

2019-12-19 00:20:00 77

原创 Leetcode 19 删除链表的第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?两次遍历的算法思路:第一遍历从头结点开始来计算链表的长度,然后根据链表的长度和n的...

2019-12-18 21:09:46 199

转载 static关键字作用总结

前言之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否有钻研精神。静态变量和静态方法static关键字最基本的用法是:1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来2、被static修饰的方法...

2019-12-18 16:45:44 98

转载 C++中explicit关键字的作用

explicit用来防止由构造函数定义的隐式转换。要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。例如:class things{ public: things(const std::string&name =""): m_name(name),height(0),wei...

2019-12-18 16:26:57 98

原创 leetcode 23 合并K个排序链表

题目描述:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6方法1:暴力合并最普通的方法,K个链表按顺序合并K-1次设有K个链表,平均每个链表有n个节点,时间复杂度为(n+n)...

2019-12-17 14:51:20 102

原创 leetcode 21 合并两个有序的链表

题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:先设立一个头结点temp_head,然后用指针pre指向它。再用指针l1和l2分别指向两个链表对应的节点,比较l1和l2指向的节点,将较小的节点插...

2019-12-17 13:03:13 96

原创 leetcode 86 分隔链表

分隔链表给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例 :输入: head = 1->4->3->2->5->2, x = 3输出 : 1->2->2->4->3->5思路:巧用临时头节点** * Definition ...

2019-12-17 12:39:33 123

空空如也

空空如也

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

TA关注的人

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