自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 水杯装水问题

可能很多人都听说过水杯装水的问题,因为这是一个很经典的数学问题,很能考察一个人的思维能力和逻辑能力,广泛出现在各行各业的面试题和一些智力竞赛中。那水杯装水问题具体描述是什么样呢?最常见的情况,就是给你两个水杯,两个杯子的容量都是固定的(比方说一个杯子的容量为3L,一个为5L),但是没有刻度,然后给你足够量的水,问你能否凑出某个体积的水(比方说凑出4L)。这是出现的比较多的,也是比较简单的情况,我们...

2019-09-12 16:06:59 5016

原创 LeetCode 24. Swap Nodes in Pairs

题目分析写链表的题最需要注意的地方就是各种边界情况。那之前博客中也分析过一些解决办法,比方说造头结点,比方说多写判空语句。这道题的swap因为是可以发生在第一个结点的,所以为了方便处理,造一个头结点是再好不过的了。分析一下这道题会出现那些情况。首先如果剩下的结点数量足够有两个,那就是最普遍的情况,比如图中1和2,那肯定说需要进行swap的;第二种情况就是如果只剩下1个结点,比方说1-2-...

2019-09-01 21:44:32 131

原创 LeetCode 69. Sqrt(x)

题目分析 & 代码第一想法是从1开始一个一个去试,这种想法比较naive,所以比较慢需要注意的就是base开成long long的类型,不然会产生溢出class Solution {public: int mySqrt(int x) { if (x == 0) return 0; long long base = 1; f...

2019-08-28 22:32:57 144

原创 LeetCode 10. Regular Expression Matching

题目分析一道开始去想确实hard的题目,原因就在于*这个情况把题目给复杂化了,没关系,一步一步,庖丁解牛。这题主流的两种做法就是递归和dp,其实这题递归来写我感觉并不比dp轻松,原因都是需要考虑比较多的情况。这里先来记录dp的做法,等以后有机会再补上递归写法。dp无非就是考虑边界和一般情况,这种双字符串比较的dp一般都是开二维数组dp[][]。为了方便考虑到空串的情况,dp[i][j]的...

2019-08-26 20:38:16 164

原创 LeetCode 27. Remove Element

题目分析 && 代码和前一道LeetCode 26. Remove Duplicates from Sorted Array一样的思路,不过它的follow-up还是有点意思。按照26题的思路,可以写出下面的代码:class Solution {public: int removeElement(vector<int>& nums, int v...

2019-08-21 16:16:47 86

原创 LeetCode 26. Remove Duplicates from Sorted Array

题目分析 && 代码这也是复习的时候感慨的一道好题目,特此记录一下。题目很简单,要求in place,也不算难,按照我的想法记录一下前一个出现的数字,因为有序,如果之后遇到了相同的,就把后面的删了。class Solution {public: int removeDuplicates(vector<int>& nums) { ...

2019-08-21 15:37:45 81

原创 LeetCode 19. Remove Nth Node From End of List

题目分析最近在把之前刷过的LC题目拿出来重做,选一些经典的题目记录下来,这道题就是很经典的也适合面试的时候写的题。这道题不难,但是链表的题目就是需要注意一些边界情况。所以一般链表的题目在写代码的时候有两个注意的点:一般都会手动加一个头结点来方便对第一个结点的处理。一般在修改指针的next的时候需要考虑这个指针是否为空 即考虑是否需要&& p下面来看这道题,最优的做...

2019-08-20 15:19:18 57

原创 普通成员函数和析构函数中调用delete this

delete是C++中的一个运算符,它是和new配合起来使用。我们知道new的实际操作是先分配一块内存,再调用对象的构造函数。而delete恰好和new的操作顺序相反,即先调用析构函数,再释放这块内存。那现在的问题是如果在类的成员函数中调用delete this,也就是相当于“类对象的自杀”,会发生什么?这里类的成员函数,大致分成类的普通成员函数和析构函数中对delete的调用。实践是最好的...

2019-08-20 14:25:31 3117

原创 LeetCode 11. Container With Most Water

题目分析也是LC很经典很老的一道题目了,考察的是双指针。能用双指针的原因基于这样的一个规则,那就是矩形的左右从两边往中间靠拢的时候,底边的长度是一定减少的,所以一开始最左边和最右边所形成的矩形的底边是最长的。那如果存在比这个大的矩形,就意味着中间一定有更高的柱子来弥补底边长度减少带来的面积损失。所以我们只需要用双指针从左和右往中间移动,移动的方法就是left和right所在柱子中,较短的那根...

2019-08-17 12:04:22 92

原创 LeetCode 229. Majority Element II

题目分析这道题是之前写过的Leetcode169. Majority Element的一个延伸,就是做了一点点小小的变化。关键点还是169里提到的摩尔投票法,在那篇写的很清楚了。现在的问题是要找出所有出现不少于n/3次的元素,首先可以确定的是满足这样的元素最多只有俩。因为假设有3个,那这三个的数量加起来就>n,显然是错误的,知道了这一点接下来我们就可以直接来找出出现最多的两个众数。...

2019-08-09 19:58:41 235

原创 LeetCode 334. Increasing Triplet Subsequence

题目分析看到题目的第一想法就是用dp来优化时间,dp[i]表示i号下标元素之前比该元素小的元素数量,初始化全为0,当dp[i]等于2的时候,就意味存在这样的三元组,返回true代码如下:class Solution {public: bool increasingTriplet(vector<int>& nums) { if (nums.si...

2019-08-06 15:25:00 81

原创 LeetCode 368. Largest Divisible Subset

题目分析看上去是很复杂的题目,需要去搜索。搜索的复杂度就是指数级的了,如果数很多就不现实了。换种思路,根据整除的传递性,比如4可以整除以2,8可以整除以4,所以8自然可以整除以2,我们就可以简化这个问题为一个dp问题。但是需要先对数组排序。dp[i] 表示数组中第i个元素和之前的数能组成的最多的整除集合的数量,初始值显然是1,就是本身一个元素作为集合。然后对每个数,遍历它之前的所有数,由...

2019-08-05 19:24:54 97

原创 LeetCode 42. Trapping Rain Water

题目分析因为这道题今天面试字节跳动给问到了原题,顺便自己也复习一遍检测一下自己。首先这道题最简单想法就是遍历每一列检查能否装水,问题就难在怎么找出来这个装水的规律。装水就意味着两边得要和这一列有高度差,然后才能产生装水的空间,而且是两边较低的那边,这个不难理解,根据木桶原理。明白这个我们就能进行分析。就拿上面的case来分析。首先需要明确的一点是第一列是肯定装不了水的,原因就是题中的设...

2019-07-14 22:11:20 74

原创 LeetCode 124. Binary Tree Maximum Path Sum

题目大意就是说一棵非空的二叉树,然后让你找出树中的最大路径和。所谓路径就是从树中一个结点沿着父子连接的路径构成的路径。需要注意的是路径不能出现分叉,比如说图中样例2,如果-10改为30,那最大的路径和是从15到20到30再到9,就不能包括7了,因为题目中说了是从一个起点到一个终点,这一点也是解题的关键。分析leetcode给这道题的难度划分在了Hard。我觉得有道理也没道理。因为这道题看...

2019-07-14 15:11:06 128

原创 LeetCode 79. Word Search

题目Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacentcell, where “adjacent” cells are those horizontally or vertically...

2019-07-13 16:40:50 110

原创 LeetCode 560. Subarray Sum Equals K

题目Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.Example 1: Input:nums = [1,1,1], k = 2 Output: 2Note: The length of t...

2019-07-07 19:08:33 72

原创 LeetCode 41. First Missing Positive

题目Given an unsorted integer array, find the smallest missing positive integer.Example 1:Input: [1,2,0] Output: 3Example 2:Input: [3,4,-1,1] Output: 2Example 3:Input: [7,8,9,11,12] Output: 1No...

2019-07-04 22:40:01 94

原创 LeetCode 31. Next Permutation

题目Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.If such arrangement is not possible, it must rearrange it as the lowest possibl...

2019-07-01 19:50:29 148

原创 LeetCode 3. Longest Substring Without Repeating Characters

题目Given a string, find the length of the longest substring withoutrepeating characters.Example 1:Input: “abcabcbb” Output: 3 Explanation: The answer is “abc”, withthe length of 3. Example 2:I...

2019-07-01 15:31:26 86

原创 LeetCode72. Edit Distance

题目Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.You have the following 3 operations permitted on a word:1.Insert a character2.Delete a ...

2019-06-28 19:36:08 161

原创 LeetCode172. Factorial Trailing Zeroes

题目Given an integer n, return the number of trailing zeroes in n!.Example 1:Input: 3 Output: 0 Explanation: 3! = 6, no trailing zero. Example 2:Input: 5 Output: 1 Explanation: 5! = 120, one traili...

2019-06-24 20:52:52 121

原创 Leetcode169. Majority Element

题目Given an array of size n, find the majority element. The majorityelement is the element that appears more than ⌊ n/2 ⌋ times. You mayassume that the array is non-empty and the majority element a...

2019-06-12 20:38:04 101

原创 Effective C++ 学习笔记 《十四》

Item 14: Think carefully about copying behavior in resource-managing classes.这一节是承接Item13来接着讲关于资源管理类中的拷贝行为。说实话这一节还有很多地方我没想的很清楚,这里先做个记录。回顾前面,item13介绍了RAII的资源管理法则,同时提到了智能指针对于堆资源的应用。但是很多情况智能指针就不太合适,需要...

2019-06-10 21:06:56 167

原创 Effective C++ 学习笔记 《十三》

Item 13: Use objects to manage resources.看到这个item就明白是关于资源管理的,众所周知,内存泄漏是c++典型的一种坑,自然而然对内存泄露的避免是一个非常有意义的话题。所以这一节的重要性尤其突出。如题,作者给出的建议就是用对象来管理资源 书上首先给了个例子void f(){ Investment *pInv = createInvestment...

2019-06-10 17:20:47 170

原创 Effective C++ 学习笔记 《二十六》

Item 26: Postpone variable definitions as long as possible.这一节作者谈到的内容是关于变量的定义时机问题。需要考虑这样的一个问题的原因就在于当定义一个变量的时候,就意味着对这个变量对象进行构造(如果有构造函数),以及在离开它作用域的时候进行析构,也就是说需要承担这些消耗。那么如何避免没有意义的消耗就是一个值得考虑的话题作者给出的建议就是...

2019-06-09 15:41:06 261

原创 Effective C++ 学习笔记 《十》

Item 10: Have assignment operators return a reference to *this其实这一点对于有一定编程经验的人都是熟稔于心,就是在类重载赋值运算符的函数返回类型应该写成类的引用类型,对应的return语句也应该写成return *this;书上说这只是个协议,没有进行深入的解析,我倒是想在这里做一点深入。首先 我们都应该知道c++的值返回类型函数...

2019-06-07 20:26:24 127

原创 Effective C++ 学习笔记 《七》

Item 7: Declare destructors virtual in polymorphic base classes看这个标题需要注意两个地方,第一个是多态基类polymorphic base classes 另一个是虚析构函数destructors virtual。作者建议我们在写为了实现多态的基类的时候,把这个基类的析构函数设为虚函数。作者给出了一个计时器的基类作为例子,这个计时...

2019-06-02 15:50:10 117

原创 Effective C++ 学习笔记 《六》

Item 6: Explicitly disallow the use of compiler-generated functions you do not want其实这一节的内容是和item5紧密相连的,上一节的核心围绕着编译器会自动生成类的一些方法,那么这一节就是围绕着如何去避免这些自动生成的方法。前一节说到如果想要编译器避免自动生成,解决方法就是自己来写一个,而且要保证写的这个“用不了...

2019-05-30 17:15:07 118

原创 Effective C++ 学习笔记 《五》

Item 5: Know what functions C++ silently writes and calls这一节讲的是C++编译器会为程序员默认生成的函数对于一个“空类” class Empty{}; 看上去好像什么都没有但是当需要构造类对象,拷贝类对象等等的时候,编译器会默认为这个类生成默认构造函数,拷贝构造函数,析构函数和拷贝赋值运算符,而且这些函数都是public且inlin...

2019-05-30 15:56:01 109

原创 Effective C++ 学习笔记 《四》

Item 4: Make sure that objects are initialized before they’re used这一节谈论的就是C++的初始化问题。这也是学习C++的时候容易犯错的地方。比如下面这段代码,类Point中的x和y就是未初始化的,所以打印得到的值是没有意义的。class Point {public: inline int getx() { retur...

2019-05-29 20:26:52 99

原创 Effective C++ 学习笔记 《十七》

Item 17 Store new ed objects in smart pointers in standalone statements.其实这一点讲的要点比较隐晦,在平时编程的时候很难发现这个问题,但要是不注意却又是一个隐患,所以对这个要点的理解更应该养成是一种编程习惯。首先书上给了一段代码作为例子int priority();void processWidget(std::tr1...

2019-05-26 18:29:35 125

原创 Effective C++ 学习笔记 《十六》

Item 16 Use the same form in corresponding uses of new and deleteItem16讲的点其实就是关于delete在处理数组和单个对象时需要注意的地方,总结成一句话就是:if you use [] in a new expression, you must use [] in the corresponding delete expre...

2019-05-26 17:18:56 121

原创 LeetCode 29 Divide Two Integers

LeetCode 29 Divide Two Integers题目大意:给你俩32位的数,不能用除法、乘法和模运算,让求出它们的商分析:题目意思挺容易理解的,难一点的地方就是不能用这些运算,所以就需要去考虑除法的本质。我们知道,四则运算中乘法运算是加法的演化,或者说本质上可以通过加法来理解,那么对于除法,也应该就对应和减法有一定的相关性。这也是我首先想到的思路:对被除数不断的减去除数,同...

2019-05-23 00:47:01 108

空空如也

空空如也

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

TA关注的人

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