自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 946. 验证栈序列

数组里的元素是不重复的。思路是模拟入栈和出栈的操作,代码如下:class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) { stack<int>s; int j=0; //...

2019-08-20 16:01:26 101

原创 二叉树的镜像、判断二叉树是否为对称二叉树

操作给定的二叉树,将其变换为源二叉树的镜像。思路:后续递归,访问的结点的时候将node的left和right结点指向交换一下即可。class Solution {public: void Mirror(TreeNode *pRoot) { if(!pRoot) return; TreeNode *tmp=pRoo...

2019-08-20 14:59:30 342

原创 利用递归实现栈的逆序

代码:利用递归暂时保存栈顶元素。其他见注释//利用递归得到栈底元素,并将栈底元素弹出int getbottom(stack<int> &s) { int top = s.top(); s.pop(); if (s.empty()) return top; int next = getbottom(s); //不是栈底元素的时候要把当前元素入栈 s.push...

2019-08-20 13:13:54 211

原创 LeetCode 48. 旋转图像

方法1:先进行矩阵转置,再将矩阵每一行逆序。class Solution {public: void rotate(vector<vector<int>>& matrix) { int n=matrix.size(); if(n==0) return; for(int i=0;i...

2019-08-18 10:49:57 105

原创 最优编辑(牛客网,动态规划)

对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。测试样例:“abc”,3,“adc”,3,5,3,100返回:8思路:d...

2019-08-17 16:05:18 320

原创 字符串交错组成(牛客网,动态规划)

对于三个字符串A,B,C。我们称C由A和B交错组成当且仅当C包含且仅包含A,B中所有字符,且对应的顺序不改变。请编写一个高效算法,判断C串是否由A和B交错组成。给定三个字符串A,B和C,及他们的长度。请返回一个bool值,代表C是否由A和B交错组成。保证三个串的长度均小于等于100。测试样例:“ABC”,3,“12C”,3,“A12BCC”,6返回: true思路: 设dp[i][j]为...

2019-08-17 15:42:22 664

原创 反转链表

方法一:三指针法每次记录当前遍历指针cur,前一个指针pre,和下一个指针nextclass Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre=NULL; ListNode* cur=head; while(cur){ ...

2019-08-17 13:36:41 91

原创 LeetCode 234. 回文链表

请判断一个链表是否为回文链表。class Solution {public: bool isPalindrome(ListNode* head) { if(!head) return true; //利用快慢指针找出链表的中点 ListNode* fast=head; ListNode* slow...

2019-08-17 12:51:25 106

原创 LeetCode 141.链表判环, LeetCode 142.并找出环的入口

判环利用快慢指针,若快指针遍历完链表之前快慢指针没有相遇的话,则说明链表中有环。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };...

2019-08-17 00:24:04 338

原创 手写堆排序

若从小到大排序,把原有数组维护成一个大顶堆即可,注意从非叶子结点中的最后一个结点倒序遍历。若二叉树结点下标从0开始,某个节点下标为k,则它的左右子节点的下标分别为2k+1,2k+2。 获得某个节点的父节点下标的方法为(idx+1)/2-1若二叉树结点下标从1开始,某个节点下标为k,则它的左右子节点的下标分别为2k,2k+1,获得某个节点的父节点下标的方法为idx/2。代码如下:#incl...

2019-08-16 23:34:26 548

原创 LeetCode.83 删除排序链表中的重复元素(保留一个数字)

借助一个虚拟头结点,每次保存重复结点的最后一个结点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solutio...

2019-08-16 18:52:22 96

原创 剑指offer:删除链表中的重复结点(重复的结点不保留)

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:因为这题要把结点重复的都删除,所以要考虑当第一二个结点就重复的情况。所以设立一个虚拟头结点,pre初始指向这个虚拟头结点。这里要用一个flag记录当前节点是否是连...

2019-08-16 18:21:11 63

原创 LeetCode 86 分隔链表

思路就是为小于k的结点链表设置一个表头,并用pcur记录新链的最后一个结点,当遍历到小于k的结点时,将pcur指向当前节点,更新pcur。用pre记录上一个大于等于k的结点(注意pre的next要设为空),当遍历到大于等于k的结点时,将pre指向当前节点,更新pre。最后将pcur指向fnode(fnode记录的是第一个大于等于k的结点)。代码:/** * Definition for s...

2019-08-16 09:58:46 88

原创 如何寻找单链表的中间节点(快慢指针)

设置两个指针,一个快指针,每次走两步,一个慢指针,每次走一步,直到快指针走到链尾。public class searchMid { public Node method(Node head) { Node p=head; Node q=head; while(q!=null&&q.next!=null&&q.next.next!=null) {...

2019-08-15 14:55:54 357

原创 最小的k个数(堆排序实现)

先用数组前k个元素维护一个大小为k的大顶堆(每次将元素插在最后,然后自底向上调整),从第k+1个数组元素开始,当数组元素小于堆顶时,取出堆顶,然后将这个元素放在堆顶,自顶向下调整。最后取出k个数的时候,先取出堆顶,然后将最后一个元素放在堆顶,自顶向下调整。class Solution {public: static const int maxn=1000000; int f=...

2019-08-15 14:27:46 510

原创 二叉树最大叶子结点到最小叶子结点的最短距离

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树的根节点root,请返回所求距离。解法:先利用getMaxandMin函数找到叶子结点中最大值和最小值对应的结点,然后利用tree函数,递归返回一个pair<int,int>,第一个...

2019-08-15 12:27:06 900

原创 对两个变量的值进行互换的三种方式

1.最常见的一种,利用第三个变量tmptmp=a,a=b,b=tmp2.在进行加法的时候可能会造成溢出x=x+yy=x-yx=x-y3.利用异或x=x^yy=x^yx=x^y

2019-08-15 09:57:43 414

转载 整数的因式分解(c语言实现)

#include<stdio.h>int main(){ int n,i; printf("Plz input int:"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { whil...

2019-08-15 09:16:55 5037

原创 剑指offer:二叉搜索树和双向链表

题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解答: 利用二叉树的中序遍历,找到第一个访问的结点(利用标志位first),用head记录头结点,p记录上一个访问的结点。cur记录当前中序遍历访问的结点。代码:/*st...

2019-08-11 11:29:13 97

原创 剑指Offer--二叉搜索树后序遍历

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。**解答:**将当前树看成二叉搜索树,那么最后一个数字就是当前树的根,而0到right-1可以划分为两段区间,第一段区间中所有的数都小于根(当然这一段区间可能为空),第二段区间中所有的数都大于根(当然这一段区间可能为空),然后对这两段区间再进行递归判断。cl...

2019-08-10 01:37:11 143

原创 面试智力题合集

1.用一个六升和五升的容器怎么得到三升的水答:先用5升的容器灌满水,倒入6升容器里,再用5升容器灌满水,用这个水把6升容器灌满,5升容器里只有4升水,把6生容器里的水倒掉,把5升容器里的水倒入6升容器,这样6升容器里有4升水。把5升容器灌满水,用这个水再把6升容器灌满,5升容器里就只有3升水了。2.已知一圈蚊香能烧1个小时,用2圈蚊香如何判断烧了15分钟?第一圈蚊香两头同时点燃,第二圈蚊香也...

2019-08-08 15:33:31 794

原创 华为校招2019.8.7笔试第三题(栈+表达式求值)

输入一个表达式的字符串,只包含0、1、|、&、!、(、)七种字符,然后输出表达式的结果,保证输入合法。!优先级大于&大于|。这题有个需要注意的点就是:!是一元运算符,这里考虑两种情况,如果!后面是数字,就直接进行运算,并将运算结果入栈。如果!后面是(,就将!压进符号栈,在(出栈时判断当前栈顶是否为!,若为!,将数字栈中的栈顶元素弹出进行!运算。代码:#include<i...

2019-08-08 10:39:56 724 4

空空如也

空空如也

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

TA关注的人

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