![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode总结
丶问题少女雷克萨
是码农,不是程序员。
展开
-
2021.5.19leetcode总结
1、二进制中1的个数(汉明重量)与主站的一道题一致,只需要设置一个count用于统计消除数字1的次数即可。当n这个二进制数不为0时,对count进行+1操作,然后再利用n&(n-1)消除整个二进制数最右边的1。2、数组中出现数字超过一半的数字两种解法:一种是利用哈希表,一种是利用众数的数学性质首先说哈希表,创建一个unordered_map mp;创建一个哈希表用于存储键值对,从原数组中取出相应的键,然后对相应的值进行+1。循环取值完成后,循环判断哈希表中的值,如果大于原数组大小的一半,则输原创 2021-05-19 10:18:46 · 150 阅读 · 0 评论 -
2021.5.17leetcode总结
1、重建二叉树题目的要求是根据提供的前序遍历和中序遍历来重建一棵二叉树解题思路:自定义一个重建函数,主函数在设定好范围后,调用即可。重建函数的想法是,首先根据输入的先序的范围进行判断,如果先序遍历范围的左边大于右边,则直接返回NULL。首先根据先序遍历的数组获得根结点的值,然后重建根结点。再根据根结点的值在中序遍历中的位置,获得左子树和右子树的数据范围。然后递归的重建左子树和右子树即可。这里一定要注意重建左子树和右子树的范围,根据样例计算一下count。重建完成后,返回root。2、用两个栈实现队列。原创 2021-05-17 20:39:10 · 128 阅读 · 0 评论 -
return NULL or return nullptr?
nulltpr is a keyword that represents zero as an address(its type is considered a pointer-type),while NULL is the value zero as an int. If you’re writing something where you’re referring to the zero address ,rather than the value zero, you should use nullpt原创 2021-05-17 10:32:47 · 667 阅读 · 0 评论 -
2021.5.14leetcode总结
1、分发饼干这是一个人典型的贪心算法的题目,原意是每一个孩子有一个饥饿度,然后每一块饼干有一个值,只有当饼干的值大于孩子的饥饿度的时候,孩子才能被满足,最终求可以被满足的孩子的数量。总体的思想就是首先对孩子的饥饿度和饼干的值进行排序。每一次从饼干中选出最小的能够满足孩子饥饿度的饼干。(从第一个孩子和第一个饼干做对比,需要理解的是,如果孩子满足了,那么孩子和饼干都要用下一个,如果孩子没满足,孩子不变,饼干用下一个。也就是说,一定要理解到的是,只要进行一次循环对比,无论孩子是否得到满足,饼干都必须用下一块。原创 2021-05-14 11:15:19 · 105 阅读 · 0 评论 -
2021.5.12leetcode总结
1、数组中的重复数字两种解法,最简单的解法是先对数组进行排序,然后从第二位开始遍历,也就是数组下标为1的那一位,然后判断,如果出现了nums[i-1] == nums[i],就证明数组中有重复的数字出现,返回nums[i]即可。第二种解法就是对存在的数组建立hashtable,对于每一个出现的数字都在hashtable对应的key值位置增加value,然后查找hashtable的value值,如果大于1,则数组中出现了重复的数字,返回当前hashtable的key值即可。注意:hashtable的建表原创 2021-05-14 10:50:03 · 90 阅读 · 0 评论 -
vector<int>& or vector<int> ?
在刷leetcode的时候,遇到的问题:在有些地方,使用的是vector&,而另一些地方使用的是vector。一直没弄懂有一个&和没有&到底是什么区别。在StackOverflow上找到了一个老哥给出的答案,原答案是这样写的:老哥的意思就是说,当你使用vector的时候,函数获得的是数组的copy也就是复制,你可以在函数中对数组做任何的事情,并且你的原始数组的数据不会改变。但是如果你使用vector&的时候,函数获得的就是对原始数据的引用,在函数中任何的修改,都会原创 2021-05-13 20:19:25 · 1481 阅读 · 1 评论 -
双指针问题总结
双指针并不是具体的算法,而是一种将问题简化的套路。经常性的能够在二分查找等算法中用到双指针。所谓的双指针,其实就是利用两个变量动态的存储两个或多个结点,方便我们操作。当我们遇到数组、链表之类的题目的时候,应该要想到利用双指针来解题。特别是链表类的题目,双指针是很重要的一环。总结一下,双指针常见的解题套路和常见的问题类型如下。1、快慢指针快慢指针类似于龟兔赛跑,两个链表上的指针从同一节点出发,其中一个指针前进速度是另一个指针的两倍。利用快慢指针可以用来解决如下的算法问题:计算链表的中点:快慢指针从原创 2021-05-11 14:50:28 · 266 阅读 · 0 评论 -
2021.5.11leetcode总结
1、两数之和思路:给定的是一个无序数组和一个target,所以直接暴力的采用两层for循环即可解决问题。但是需要注意的是,第二层for循环的开始位置为第一层for循环开始位置的下一位。最后取出两个值和target做判断即可。如果匹配成功,则返回两个值在数组中的下标(return {i,j})。如果没有匹配成功,则返回空的列表(return { })。注意:在C++ 11 中,return { } 意味着 { } 是返回值的初始值设定项,返回值是一个列表初始化的空列表。2、x的平方根思路:给定的是一个原创 2021-05-11 11:01:57 · 82 阅读 · 0 评论