37.

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

思路:

1.平衡二叉树的定义为,当为空树或左右子树高度小于等于1,同时左右子树都要为平衡二叉树。

2.先分别求出左右子树的高度,比较高度差,如果高度差大于1,直接返回false,如果高度不大于1,那么则递归判断左右子树是否为平衡二叉树。

代码贴下:

class Solution {
public:
int getDepth(TreeNode* pRoot)
{
if(!pRoot)
{
return 0;
}
if(!pRoot->left&&!pRoot->right)
{
return 1;
}
int len1=getDepth(pRoot->left)+1;
int len2=getDepth(pRoot->right)+1;
return len1>len2?len1:len2;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if(!pRoot)
{
return true;
}
int llength=getDepth(pRoot->left);
int rlength=getDepth(pRoot->right);
if(llength>rlength+1||rlength>llength+1)
{
return false;
}else
{
return IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);
} }
};

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。


思路:

1.先按升序排序(c++内置函数sort),那么如果只要是两个相同的数,都会排列在一块,假设原数组为2,4,5,5,6,4,经过排序后就变为2,4,4,5,5,6,出现次数为2的数,就会靠在一起,这时我们需要遍历一下数组,比较相邻的数字是否相等,如果相等就将遍历的指针,加2,不相等就赋值第一个数,指针加1,再碰到个不相等的,就再赋值给第二个数,break,完成任务了。

代码如下:

class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
sort(data.begin(),data.end());
int p1=0;
int i=0;
while(i<data.size())
{
if(data[i]!=data[i+1])
{
if(p1==0)
{
*num1=data[i];
p1=1;
}else
{
*num2=data[i];
} i++;
}else
{
i+=2;
} }
}
};

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?

Good Luck!

思路:

1.连续的序列的和,那么等差数列和的n(a1+an)/2公式肯定是少不了的。

2.双指针,相等于一个滑动窗口,不断的扩大和缩小。直接看代码吧,比较简单。

class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> buffer; int i=1;
int j=2;
int res=0;
while(i<j)
{ res=((i+j)*(j-i+1))/2;
if(res==sum)
{
vector<int> inside;
for(int z=i;z<=j;z++)
{
inside.push_back(z);
}
buffer.push_back(inside);
i++;
}else if(res>sum)
{
i++;
}else if(res<sum)
{ j++;
} }
return buffer; }
};

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

思路:

双重循环,遍历,就完事了。

代码如下;

class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> res;
for(int i=0;i<array.size();i++)
{
for(int j=i+1;j<array.size();j++)
{
if(sum-array[i]==array[j])
{
res.push_back(array[i]);
res.push_back(array[j]);
return res;
}
}
}
return res; }
};

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

思路:

左移多少位,相等于将前几位,拼接到后面去了,抱着这种思路去写,当然不止我这种写法,我这种删除的,也可以用截取的,看个人吧。

代码如下:

class Solution {
public:
string LeftRotateString(string str, int n) {
if(n<0) return NULL;
if(n==0)return str;
string str1=str.substr(0,n);
str.erase(0,n);
str+=str1;
return str; }
};

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

思路:

以空格分割开来,成为一个数组,之后再调换,最后再遍历一下,拼接起来,这里用的是java写的,c++对字符串感觉没java友好。

public class Solution {
public String ReverseSentence(String str) {
if(str==null)
{
return null;
}
if(str.trim().equals(""))
{
return str;
}
String[] a=str.split(" ");
String res="";
int j=a.length-1;
int i=0;
while(i<j)
{
String tmp=a[i];
a[i]=a[j];
a[j]=tmp;
i++;
j--;
}
for(int x=0;x<a.length;x++)
{
res+=a[x];
if(x!=a.length-1)
{
res+=" ";
}
}
return res;
}
}

剑指offer 37-42的更多相关文章

  1. 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历

    剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...

  2. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...

  3. 剑指offer 面试42题

    面试42题: 题目:连续子数组的最大和 题:输入一个整形数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n) 解题思路:在数组里从前 ...

  4. 【Java】 剑指offer(37) 序列化二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下 ...

  5. 【剑指offer】42.和为S的两个数字

    42.和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 示例: 输入:[1,2,4,7,11 ...

  6. 剑指offer(42)和为S的字符串

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题目 ...

  7. 剑指Offer 37. 数字在排序数组中出现的次数 (数组)

    题目描述 统计一个数字在排序数组中出现的次数. 题目地址 https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId ...

  8. [剑指Offer] 37.数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数. [思路]因为是排序数组,所以可以用二分法搜索到要查找的值在数组中的一个位置,接着向两侧扫描,遇到不等的就停止. class Solution { pub ...

  9. 【剑指Offer】42、和为S的两个数字

      题目描述:   输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的.   输出描述:   对应每个测试案例,输出两个数, ...

  10. 剑指offer——37复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

随机推荐

  1. 简单读读源码 - dubbo多提供者(provider)配置方法

    简单读读源码 - dubbo多提供者(provider)配置方法 消费者端dubbo的yml配置 dubbo: consumer: timeout: 300000 protocol: name: du ...

  2. ShardingSphere你还不会吗?(第一篇)

    ShardingSphere你还不会吗?(第一篇) 作者:星晴(当地小有名气,小到只有自己知道的杰伦粉) 一.需求 我们做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的 ...

  3. Linux(CentOS7)下rpm安装MySQL8.0.16

    记录一下自己在 CentOS7 下 rpm 安装 MySQL8.0.16 的过程. 一.准备工作 1. 下载MySQL所需要的安装包 从 MySQL官网 下载,上传至 CentOS 系统 /usr/l ...

  4. 解决Maven资源过滤问题

    向pom文件添加如下配置 <build> <resources> <resource> <directory>src/main/java</dir ...

  5. 游刃于私有网络与公共网络之间的NAT

    网络地址转化技术NAT 1. 应用场景 2. NAT 2.1 静态NAT 2.2 动态NAT 2.3 NAPT 2.4 EASY IP 3. NAT配置 3.1 静态NAT 3.2 动态NAT 3.3 ...

  6. supervisor 使 celery后台运行

    1.安装 supervisor pip install supervisor  2.创建supervisor配置文件,命令如下: 进入项目文件 echo_supervisord_conf > s ...

  7. GPU自动调度卷积层

    GPU自动调度卷积层 本文对GPU使用自动调度程序. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,无需任何调度命令或模板.自动调度程序 ...

  8. Java中List集合转Map集合报错:Duplicate key

    一.问题由来 最近生成环境刚发布了一个版本,本人负责优化的一个功能在进行测试时,报错了一个异常,duplicate key;去百度里面看了一下, 意思很明确就是建重复,而且错误是在Java代码中抛出来 ...

  9. 692. 前K个高频单词

    2021-05-20 LeetCode每日一题 链接:https://leetcode-cn.com/problems/top-k-frequent-words/ 标签:堆.字典序.哈希表 题目 给一 ...

  10. 安全Web服务器

    https协议: 443 端口 虚拟Server0: 1.部署 网站证书(营业执照)# cd /etc/pki/tls/certs/ # wget http://classroom.example.c ...