刷题
qq_39075406
这个作者很懒,什么都没留下…
展开
-
top200两个链表的第一个公共结点
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { int len1=0,len2=0; ListNode* p=pHead原创 2021-05-27 20:29:04 · 58 阅读 · 0 评论 -
top200合并两个有序数组
从数组后面向前处理会更方便 class Solution { public: void merge(int A[], int m, int B[], int n) { int i=m-1,j=n-1,a=m+n-1; while(i>=0||j>=0){ if((i>=0&&A[i]>=B[j])||j<0) A[a--]=A[i--]; el原创 2021-05-27 19:51:29 · 59 阅读 · 0 评论 -
top200判断链表中是否有环
虽然不是太明白快慢指针对于有环的判断,但emmm /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(原创 2021-05-27 19:45:20 · 42 阅读 · 0 评论 -
top200数组中出现次数超过一半的数字
不是,说我这个超过0.00%是不是太欺负人了!!哼,反正我通过了,我就是擅长穷举。 class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { int a=numbers.size(); int b=0; int c=0; for(int i=0;i<a;i++){ b=numbers[i];原创 2021-05-27 19:25:48 · 34 阅读 · 0 评论 -
top200括号序列
class Solution { public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid(string s) { // write code here stack<char> ss; bool a=false; for(int i=0;i<s.length();i++){原创 2021-05-27 18:24:19 · 43 阅读 · 0 评论 -
top200子数组的最大累加和问题
class Solution { public: /** * max sum of the subarray * @param arr int整型vector the array * @return int整型 */ int maxsumofSubarray(vector<int>& arr) { // write code here int max=0; int cur=0;原创 2021-05-27 17:49:30 · 75 阅读 · 0 评论 -
top200合并有序链表
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ ListNode* mergeTwoLists(ListNode* l1, ListNode*原创 2021-05-27 17:41:45 · 50 阅读 · 0 评论 -
top200两数之和
class Solution { public: /** * * @param numbers int整型vector * @param target int整型 * @return int整型vector */ vector twoSum(vector& numbers, int target) { // write code here int index1=-1,index2=-1; int a=numbers.size(); for(int i=0;i<a;i++){ for(int j原创 2021-05-27 17:16:33 · 39 阅读 · 0 评论 -
offer--树的子结构
原本想用KMP但忘了怎么写所以看了下评论没想到都没有KMP,多看了两眼才知道不行。记录两段。 原来的先序遍历其实是DFS,由于比较的是子结构,不是子树,所以采用原来的先序遍历会报错,可以调整下遍历算法,采用BFS,这样就没问题了。 子树能用序列化+KMP,子结构不能,因为子结构不管采用何种方式序列化,都不能保证在整棵树的序列化中连续。 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNo原创 2021-04-14 22:49:19 · 47 阅读 · 0 评论 -
offer--合并两个排序的链表
一开始的pHead要指向两链表种偏小的结点,一开始没有指向,直接用的空不行,要指向一个结点 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode* pHe原创 2021-04-13 22:12:04 · 45 阅读 · 0 评论 -
offer--反转链表
注意要有一个记录前面结点的指针。p是当前指针,r是当前指针的前一个结点,pnext为了记录下一个结点,预防找不到。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL原创 2021-04-12 20:04:37 · 36 阅读 · 0 评论 -
offer--链表中倒数第k个节点
明明不止一次看到这个算法还是在每次看到的时候恍然大悟,我也是绝了,每次都用暴力。 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * *原创 2021-04-12 19:21:44 · 30 阅读 · 0 评论 -
offer--调整数组顺序使奇数位于偶数前面
第一反应是加个数组,还有插入排序,但没反应过来是叫插入排序。 class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> reOrderArray(vector<int>& array)原创 2021-04-12 18:48:26 · 37 阅读 · 0 评论 -
offer--数值的整数次方
我看我脑子只会最暴力的算法,也不知道这些都学到哪去了,想不出来简单的,但像这种我一猜这么直接乘肯定会超过的就放弃了。 贴一个快速幂的博客: https://blog.csdn.net/hkdgjqr/article/details/5381028 还是自己看了算法敲会印象深一点 class Solution { public: double power(double base,int exponent){ double result=1.00; if(exponent原创 2021-04-12 17:38:23 · 55 阅读 · 0 评论 -
offer--二进制中1的个数
不会写负数有关的,哎,我一直想知道这种都是咋想出来的,多做题能做到吗。 贴个评论解析 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。原创 2021-04-12 17:02:58 · 37 阅读 · 0 评论 -
offer--矩形覆盖
做个笔记吧 第一次摆放一块 21 的小矩阵,则摆放方法总共为f(number- 1) 第一次摆放一块12的小矩阵,则摆放方法总共为f(number-2) class Solution { public: int rectCover(int number) { if(number<=2) return number; int f=1,g=2,result=0; for(int i=3;i<=number;i++){ r原创 2021-04-11 18:47:39 · 33 阅读 · 0 评论 -
offer--跳台阶问题
class Solution { public: int jumpFloorII(int number) { if(number<=0) return -1; else if(number==1) return 1; else return 2*jumpFloorII(number-1) } };原创 2021-04-11 18:29:11 · 33 阅读 · 0 评论 -
offer--跳台阶
实际是斐波那契数列 class Solution { public: int jumpFloor(int number) { if(number<=2) return number; int f1=1,f2=2; int sum=0; for(int i=2;i<number;i++){ sum=f1+f2; f1=f2; f2=sum;原创 2021-04-11 17:16:37 · 25 阅读 · 0 评论 -
offer--斐波那契数列
下意识用递归还思考了下怎么写,但评论说递归计算量太大通过不了。 class Solution { public: int Fibonacci(int n) { int f=0,g=1; int result=0; if(n==0) return 0; if(n==1) return 1; for(int i=2;i<=n;i++){ result=f+g; f=g;原创 2021-04-11 16:48:27 · 40 阅读 · 0 评论 -
offer--旋转数组的最小数字
我看理解题意将是我在刷题路上最大的障碍。 这题,非递减有序数组->旋转后的数组->找最小 原来觉得直接找最小但题目提示用二分 class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { if(rotateArray.empty()) return 0; int left=0,right=rotateArray.size()-原创 2021-04-11 16:38:50 · 32 阅读 · 0 评论 -
offer--两个栈实现队列
C++ 注意一下是先得到栈顶元素,然后push到新栈,旧栈再pop。 class Solution { public: void push(int node) { stack1.push(node); } int pop() { int a; if(stack2.empty()){ while(!stack1.empty()){ a=stack1.top();原创 2021-04-10 13:29:06 · 26 阅读 · 0 评论 -
offer--重建二叉树
C++ 没记错的话这类树的大部分都是递归 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* reConst原创 2021-04-10 13:19:27 · 29 阅读 · 0 评论 -
offer--从尾到头打印链表
C++,用栈(很多东西要想起来用) class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> value; ListNode *p=NULL; p=head; stack<int> s; while(p!=NULL){ s.push(p-&原创 2021-04-10 12:53:20 · 31 阅读 · 0 评论 -
offer--替换空格
C++ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string replaceSpace(string s) { // write code here int n =s.size(); stri原创 2021-04-10 12:35:57 · 70 阅读 · 0 评论 -
offer--二维数组中的查找
C++代码 感觉自己C++学的不怎么好但是这些刷题感觉还是C++和Java用起来顺手一些,可是怕面试的时候问到的不怎么会,就悲伤。 class Solution { public: bool Find(int target, vector<vector<int> > array) { int rows=array.size(); int cols=array[0].size(); int i=rows-1,j=0;原创 2021-04-10 12:05:43 · 39 阅读 · 0 评论