算法刷题
半夏丶ExAg3r
岂能尽如人意。
展开
-
二叉树的最近公共祖先
二叉树的最近公共祖先1.搜索二叉树解题思路:由于为搜索二叉树,所以判断所给节点的值与根节点值大小的比较,如果p大于根节点,q小于根节点,那么根节点必定为公共祖先.如果都小于则在root->left中继续遍历都大于在root->right中遍历。class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(p == root原创 2020-12-21 21:32:37 · 127 阅读 · 0 评论 -
剑指Offer||变态跳台阶
剑指Offer-09 变态跳台阶题目描述: 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级……也可以跳n级。求总共有多少总跳法,并分析算法的时间复杂度。分析:用Fib(n)表示跳上n阶台阶的跳法数。如果按照定义,Fib(0)肯定需要为0,否则没有意义。但是我们设定Fib(0) = 1;n = 0是特殊情况,通过下面的分析就会知道,强制令Fib(0) = 1很有好处。ps. Fib(0)等于几都不影响我们解题,但是会影响我们下面的分析理解。当n = 1 时, 只有一种跳法,即1阶跳:Fib原创 2020-12-10 20:56:03 · 73 阅读 · 0 评论 -
剑指Offer|| 用两个栈实现队列
用栈实现队列用两个栈实现队列思路:创建两个栈s1 s2s2用来模拟入队。s1用来模拟出队后面设计思路就非常的简单class CQueue {public: stack<int> a;//入队 stack<int> b;//出队 CQueue() { } void appendTail(int value) { a.push(value); } int deleteHead() { if(b.原创 2020-12-08 19:54:14 · 78 阅读 · 0 评论 -
剑指Offer||合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4//非递归方法class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new Li原创 2020-12-08 19:53:10 · 76 阅读 · 0 评论 -
剑指Offer|| 不用加减乘除计算加法
剑指Offer48-不用加减乘除计算加法题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析:注意测试用例里面可能有期中有个数为0的情况这样while循环会直接跳出去,所以先判断下。class Solution {public: int Add(int num1, int num2) { int sum,carry; if(num2 == 0) { num2 = num1;原创 2020-12-08 19:51:58 · 71 阅读 · 0 评论 -
剑指 Offer|| 跳台阶
剑指offer-8题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目分析:与斐波那契数列类似,当number为0,1,2时候返回本身,当number大于2时,返回该数的后两位数字相加.//非递归class Solution {public: int jumpFloor(int number) { vector<int> v(number+1); v[0]=原创 2020-12-08 19:51:20 · 78 阅读 · 0 评论 -
牛客网||参数解析
**题目ID:****36898-**参数解析链接:https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677?tpId=37&&tqId=21297&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking【题目解析】:本题考察string的运用【解题思路】:本题通过以空格和双引号为间隔,统计参数个数。对于双引号,通过添加flflag.原创 2020-12-07 15:48:26 · 175 阅读 · 0 评论 -
牛客网||求最大连续bit数
题目ID:36910求最大连续bit数链接:https://www.nowcoder.com/practice/4b1658fd8ffffb4217bc3b7e85a38cfaf2?tpId=37&&tqId=21309&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking【题目解析】:这道题考察位运算【解题思路】:根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) &.原创 2020-12-04 20:16:01 · 145 阅读 · 0 评论 -
牛客网||最近公共祖先
题目ID:最近公共祖先链接:https://www.nowcoder.com/practice/70e00e490b454006976c1fdf47f155d9?tpId=8&&tqId=11017&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking【题目解析】:最近公共祖先表示距离两个节点最近的公共父节点,这道题考察二叉树。【解题思路】:题目所描述的满二叉.原创 2020-12-04 20:14:48 · 146 阅读 · 0 评论 -
牛客网||井字棋
题目:井字棋题目解析:判断行,列,主副对角线之和是否等于行数。class Board {public: bool checkWon(vector<vector<int> > board) { //检查行和是否为row int row = board.size(); int i,j,sum; for(i=0;i<row;i++) { sum = 0; .原创 2020-12-03 15:11:36 · 214 阅读 · 0 评论 -
剑指Offer||合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4//非递归方法class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new Li原创 2020-12-02 16:26:55 · 82 阅读 · 0 评论 -
牛客网||求路径总数
**题目ID:****36915-**求路径总数链接:https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b?tpId=37&&tqId=21314&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking解题思路| 1 | 2 | 3 |-------------| 4 | 5 | 6 |-------------| 7原创 2020-12-02 15:30:28 · 207 阅读 · 0 评论 -
牛客网||另类加法
**题目ID:****25083 --**另类加法链接:https://www.nowcoder.com/practice/e7e0d226f1e84ba7ab8b28efc6e1aebc?tpId=8&&tqId=11065&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking【题目解析】本题的意思是自己实现加法,不适用现成的运算符.【解题思路】:本题原创 2020-12-02 15:29:24 · 119 阅读 · 0 评论 -
牛客网||最小公倍数
题目:求最小公倍数【解题思路】:最小公倍数 = 两数之积除以最大公约数,这里使用碾转相除法进行最大公约数的求解:即a与b的最大公约数可以转化为a、b之间的余数为两者之间最小的数之间的公约数。所以对于输入的两个数进行连续求余,直到余数为0,求余的分母即为结果。(辗转相除法求最大公约数)#include <iostream>using namespace std;int gcd(int a,int b){ int tmp = 0; while(a%b!=0) {原创 2020-12-01 17:39:40 · 116 阅读 · 0 评论 -
牛客网||两种排序方法
题目:两种排序方法【解题思路】:思路很简单,将接受的字符串都放到vector容器中,利用string的operator>=运算符重载来按ASCII比较字符串,利用string的size来比较字符串的长度.//根据字典排序即根据阿斯克吗值排序#include <iostream>#include <string>#include <vector>using namespace std;//长度排序bool LenSort(vector<s..原创 2020-12-01 17:38:10 · 145 阅读 · 0 评论 -
牛客网||斐波那契数
牛客网刷题题目****ID:45846 --Fibonacci数列链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66?tpId=85&&tqId=29846&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking【题目解析】:本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1原创 2020-11-30 18:10:21 · 127 阅读 · 0 评论 -
牛客网||合法括号序列判断
牛客网刷题**题目ID:****36939-**合法括号序列判断链接:https://www.nowcoder.com/practice/d8acfa0619814b2d98f12c071aef20d4?tpId=8&&tqId=11039&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking【题目解析】:本题考查的是对栈的应用【解题思路】:用栈结构实现,栈中原创 2020-11-30 18:07:58 · 117 阅读 · 0 评论 -
牛客网||字符串转整数
字符串转成整数https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&&tqId=11202&rp=6&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking【题目解析】:本题本质是模拟实现实现C库函数atoi,不过参数给的string对象【解题思路】:解题思路非常简单,就是上次计算的结果*10,相当于1原创 2020-11-27 20:12:27 · 110 阅读 · 0 评论 -
剑指offer||栈实现队列
用栈实现队列用两个栈实现队列思路:创建两个栈s1 s2s2用来模拟入队。s1用来模拟出队后面设计思路就非常的简单class CQueue {public: stack<int> a;//入队 stack<int> b;//出队 CQueue() { } void appendTail(int value) { a.push(value); } int deleteHead() { if(b.原创 2020-11-27 17:58:09 · 49 阅读 · 0 评论 -
LeetCode||编写一个程序,找到两个单链表相交的起始节点。
编写一个程序,找到两个单链表相交的起始节点。思路:给两个指针curA和curB同时从两个链表的起始位置开始比较,如果cur1和cur2两个字节的地址相同,则为交点,否则两个指针同时往下移动b-a的节点个数 让长的先走b-a次 然后同时走.class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { //如果有一个为空则不相交 if(null原创 2020-10-28 13:32:34 · 255 阅读 · 0 评论 -
牛客网||动态规划问题之计算最大连续和
动态规划问题之计算最大连续和**58539-**连续最大和https://www.nowcoder.com/practice/5a304c109a544aef9b583dce23f5f5db?tpId=85&&tqId=29858&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking假设sum[j-1]是以数组中第nums[j-1]为最后一个元素的一段子数的最大和sum[j]是以数组中第nums[j]为最原创 2020-11-26 20:49:01 · 126 阅读 · 0 评论