剑指offer
文章平均质量分 63
ice_tomato
这个作者很懒,什么都没留下…
展开
-
记录面试中被要求写的一些题以及别的爱考的:最长回文子串+最长无重复字符的子串+最长公共子序列
1.最长回文子串 力扣第五题子串:子串必须要是连续的,区别于子序列的概念子序列:对于暴力解法可以优化的地方:只在子串的长度>当前最大的长度的时候,才会去判断回文,class Solution {public:bool ishuiwen(string s){ if(s.size()==1) return true; int i=0; int j=s.size()-1; while(i<=j){ if(s[i]!=s[j]){原创 2021-09-20 20:48:38 · 87 阅读 · 0 评论 -
把数组排成最小的数字,划分字母区间,最小覆盖子串,验证回文字符串II
面试题45:把数组排成最小的数字输入一个正整数数组,把数组里所有的数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。class Solution {public:static int MyCompare(const string& s1,const string& s2){ return s1+s2<s2+s1;} string minNumber(vector<int>& nums) { int n=num原创 2021-08-02 22:58:44 · 125 阅读 · 1 评论 -
剑指offer:把字符串转换成整数+从上到下打印二叉树II
1.把字符串转换成整数自己写了一个比较麻烦的解法,class Solution {public: bool isoverflow(int fuhao,int x,int mul,int sum){ bool res=false; if(fuhao==1){ if(sum>INT_MAX-mul*x) res=true; } if(fuhao==-1){ if(sum>原创 2021-06-01 12:20:23 · 62 阅读 · 0 评论 -
剑指offer:用两个栈实现队列+包含min函数的栈+栈的压入,弹出序列+合并两个有序数组
1.用两个栈实现队列当Stack2不为空时,在stack2的栈顶元素是最先进入队列的元素,可以弹出。当stack2为空时,我们把stack1中的元素逐个弹出并压入stack2.class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.size()<=0){//这句是必不可少的,试想如果没有这个条件判断,则会发生st原创 2021-05-28 21:36:32 · 90 阅读 · 1 评论 -
leetcode剑指offer(二)旋转数组的最小数字+寻找旋转排序数组中的最小值+在排序数组中查找数字+在排序数组中查找元素的第一个和最后一个位置
1.旋转数组的最小数字把一个数组最开始的若干元素搬到数组的末尾称为数组的旋转。此题和下一道题的一个区别是:数组中可以有重复的数字。二分查找:开始时,先找出有序集合中间的那个元素。如果此元素比要查找的元素大,就接着在较小的一个半区进行查找;反之,如果此元素比要找的元素小,就在较大的一个半区进行查找。在每个更小的数据集中重复这个查找过程,直到找到要查找的元素或者数据集不能再分割。在二分搜索中,我们找到区间的中间点并根据某些条件决定去区间左半部分还是右半部分搜索。下面是二分查找的递归实现:class原创 2020-08-22 17:26:20 · 159 阅读 · 0 评论 -
剑指offer字符串相关:字符串压缩+最长不含重复字符的子字符串+翻转字符串+字符串转整数
1.字符串压缩class Solution {public: string compressString(string S) { if(S.length()==0) return S; string compressResult; int count=0; int i=0; int j=0; while(i<S.length()&&j<S.length()){原创 2021-04-24 20:37:24 · 154 阅读 · 0 评论 -
树的子结构+重建二叉树
树的结构的定义是一个递归的定义。树是n个结点的有限集。在任意一棵非空树中(1)有且仅有一个特定的称为根的结点(2)n>1时其余结点可分为m个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树。二叉树的实现和遍历面试题:树的子结构class Solution {public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result=false;//采用先序遍历原创 2021-05-23 12:10:38 · 67 阅读 · 1 评论 -
剑指offer(一)用两个栈实现队列+数组中重复的数字+二维数组中的查找
1.用两个栈实现队列2.数组中重复的数字原创 2020-08-14 21:09:02 · 135 阅读 · 0 评论 -
剑指offer剪绳子+礼物的最大价值+把数字翻译成字符串(这三道都是动态规划)
1. 面试题14 剪绳子要点:首先定义函数f(n)为把长度为n的绳子剪成若干段后各段长度乘积的最大值。 在减第一刀的时候,我们有n-1种可能的选择,也就是剪出来的第一段绳子的可能长度分别为1,2,...,n-1.因此f(n)=max(f(i)*f(n-i)).class Solution {public: int cuttingRope(int n) {if(n==2) return 1;if(n==3) return 2;int f[n+1];f[1]=1;f[2]=2;f原创 2021-05-09 19:57:11 · 63 阅读 · 0 评论