刷题
_Double_
这个作者很懒,什么都没留下…
展开
-
算法 - 二分查找的三种框架/模式
一、查找某个元素的位置,不存在返回-1:class Solution {public: int search(vector<int>& nums, int target) { //采用基础框架 int left = 0, right = nums.size()-1; while(left <= right){ int mid = left+(right-left)/2;原创 2020-07-16 15:08:44 · 264 阅读 · 1 评论 -
刷题 - 三角形最小路径和
问题描述:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。 [2], [3,4], [6,5,7], [4,1,8,3]自顶向下的最小路径和为11(即,2+3+5+1= 11)。//自底向上class Solution {public: int minimumTotal(vector<vec...原创 2020-07-08 10:12:26 · 152 阅读 · 0 评论 -
刷题 - 旋转链表
题目:给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 0->1->2->NULL, k = 4输出: 2->0->1->NULL解释:向右旋转 1 步: 2->0->1->NULL向右旋转 2 步: 1->2->0->NULL向右旋转 3 步:0->1->2->NULL向右旋转 4 步:2->0->1->...原创 2020-07-07 20:21:24 · 198 阅读 · 0 评论 -
算法 - 7大比较类排序算法程序设计
典型的7大排序算法典型的7大排序算法包括:(1)冒泡排序(2)选择排序(3)插入排序(4)希尔排序(5)归并排序(6)快速排序(7)堆排序7中排序算法中:快速排序、希尔排序、选择排序、堆排序是稳定的排序算法。7大排序算法程序如下:class Solution {public: vector<int> sortArray(vector<int>& nums) { if(nums.size()<=1){原创 2020-07-07 14:24:51 · 202 阅读 · 0 评论 -
刷题 - 岛屿数量
问题描述:给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。对于网格类遍历问题,深度优先搜索dfs是一种典型的解决方案,类比于二叉树的DFS,其程序框架如下:void dfs(TreeNode* node){ if(node == NULL) return; dfs(node->left); .原创 2020-07-05 12:09:24 · 171 阅读 · 0 评论 -
刷题 - 二叉搜索树的第k小节点
题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。根据二叉搜索树的性质,采用中序遍历:class Solution {public: //对于二叉搜索树来说中序遍历的结果就是有序序列,第K个元素就是vec[K-1]存储的节点指针; TreeNode* KthNode(TreeNode* pRoot, unsigned int k) { if(pRoot==..原创 2020-07-01 09:48:30 · 2032 阅读 · 0 评论 -
刷题 - 按之字形打印二叉树
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:从题目分析可知,题目的意思是:从上到下,单数行从左到右打印,双数行从右到左打印,这就需要我们在求解过程中要记住当前打印的是单数行还是奇数行。考虑设置两个辅助栈空间,分别用于存放单数行的数据和双数行的数据,根据层序遍历的思想:遍历某一行时,可以直接将下一行的内容缓存,由此得到处理流程思路: ...原创 2020-07-01 09:10:54 · 145 阅读 · 0 评论 -
刷题 - 约瑟夫问题 -模拟过程及简单求解
约瑟夫问题约瑟夫问题表述如下:假定有N个人围成一个环,并对每个人进行顺序编号,我们设定一个数字M,M<=N,从第一个人开始报数,报到M后这个人出列,剩下的人继续从1开始报数,报到M出列,依次进行下去,直到所有的人都出列。模拟约瑟夫全过程:模拟约瑟夫问题的全过程,记录出列的人的顺序,模拟约瑟夫问题的方法可以用链表也可以用数组,在此我们用数组的方式给出模拟约瑟夫问题的过程:假定共有N个人,我们申请一个大小为N的数组,这个数组每个位置依次对应着编号为1、2、3、....、N的人,则数组编原创 2020-06-29 10:51:32 · 596 阅读 · 0 评论 -
刷题 - 和为S的两个数 - 双指针
题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解题思路:笔者在前面刷题系列中写了一个 “和为S的连续正数序列 ”,这个问题中采用了双指针的方法,本题中同样可以采用这种方法。对给定的递增序列,给定两个双指针分别指向数列头和尾,将指针指向的两个数据求和,与S比较:(1)s1+s2 = S,找到了一组满足条件的数据,返回结果即可;(2)s1+s2 > S,需要缩小,则s2后移一位继续判断;.原创 2020-06-28 15:09:37 · 338 阅读 · 0 评论 -
刷题 - 和为S的连续正数序列 - 双指针/滑动窗
题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?分析该题目,就是给定一个正数S,求所有和为S的连续的正数序列,本题目我们通过滑动窗来解决,滑动窗也可以理解为一种双指针,两个指针组成了窗口。本题中,待分析的序列就是原创 2020-06-28 14:45:40 · 139 阅读 · 0 评论 -
刷题 - 数组中只出现1次的两个数
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。预备知识:对于一个整数数组,首先我们先分析一个简单的情况:假定数组中只有一个数据出现1次,其他数据都出现了两次,如何找到这个只出现1次的数据?位运算中,两个数的异或运算规则是:二进制位相同返回0,不同返回1,由此两个相同数据的异或值为0,任何数据与0的异或还为原值。如1100^1100=0000,1010^0000=1010。所以可以很快想到,上面求唯一一个出现1次的数据就可以对数组中的原创 2020-06-28 10:43:39 · 167 阅读 · 0 评论 -
刷题 - 判断二叉树是否为平衡二叉树(附加求二叉树的深度/高度)
求解二叉树的深度/高度:采用递归的处理思路进行求解,二叉树中以某个节点为根的子树的高度 = 1+max(左子树高度,右子树高度)。class Solution {public: int TreeDepth(TreeNode* pRoot){ if(!pRoot) return 0 ; return 1+max(TreeDepth(pRoot->left),TreeDepth(pRoot->right)); }};...原创 2020-06-28 09:54:27 · 217 阅读 · 0 评论 -
刷题-寻找两个链表第一个交点
问题描述:输入两个链表,找出它们的第一个公共结点。本题的思路很简单,首先我们考虑一种特殊的相交链表,如下图所示: 两个相交的链表长度相同,想要找到第一个公共的节点很简单,维护两个指针,从2个链表头开始,逐个节点遍历对比,相同时就找到了第一个公共交点。扩展为复杂的情况,两个链表长度不同时: ...原创 2020-06-28 09:50:18 · 226 阅读 · 0 评论 -
刷题-数组中逆序对数目
问题描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入:1,2,3,4,5,6,7,0,输出:7.解题思路:思路1:暴力搜索暴力搜索的方法思路很简单,就是从数组第一个数据开始遍历,逐个比较这个数据与其后数据的大小,记录逆序个数,该方法的时间复杂度为O(n^2)。思路2:分析/归并排序思想1、基于分治思想的归并排序:原创 2020-06-27 17:04:14 · 1097 阅读 · 0 评论 -
刷题-第一次只出现1次的字符
查找第一次只出现1次的字符:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)解题思路:直观的考虑就是将字符串中每个字符出现的次数统计下来,然后找出第一次出现1次的字符。C++中STL中map是一种关联容器,底层实现结构采用红黑树。map以key-value结构的方式存储数据,关键字key起到了索引作用,value对应索引的数据,map的迭代器不允许修改key的原创 2020-06-27 16:04:44 · 148 阅读 · 0 评论 -
刷题-丑数提取及丑数判断
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。原创 2020-06-27 15:34:23 · 331 阅读 · 0 评论