1. 二进制中1的个数
  2. 数值的整数次方
  3. 调整数组顺序使奇数位于偶数前面
  4. 链表中倒数第k个结点
  5. 反转链表
  6. 合并两个排序的链表
  7. 树的子结构
  8. 二叉树的镜像
  9. 顺时针打印矩阵
  10. 包含min函数的栈

11.输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n){
count++;
n = n & (n-1);
}
return count;
}
};

12.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

class Solution {
public: double Power(double base, int exponent) {
if(exponent == 0) return 1;
if(exponent == 1) return base; int sign = 1;
if(exponent < 0) {
sign = -1;
exponent = - exponent;
} double res;
res = Power(base,exponent >> 1);
res *= res;
if(exponent >> 1 & 1){
res *= base;
}
if(sign == -1){
res = 1.0 / res;
} return res; }
};

13.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

class Solution {
public:
void reOrderArray(vector<int> &array) {
int n = array.size();
int pEven = 0; //第一个偶数的位置
for (int i = 0; i < n; i++) {
if (array[i] % 2 == 0) {
pEven = i;
break;
}
}
for (int i = pEven+1; i < n; i++) {
//发现奇数,从第一个偶数开始,后移
if (array[i] % 2 == 1) {
int temp = array[i];
for (int j = i; j >= pEven; j--) {
array[j] = array[j - 1];
}
array[pEven] = temp;
pEven++;
}
}
}
};

14.输入一个链表,输出该链表中倒数第k个结点。

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode*pListHead,unsigned int k){ ListNode* p = pListHead;
ListNode* q = p;
while(k--){
if(p){
p = p->next;
}else{
return nullptr;
}
} while(p){
if(p){
p = p->next;
q = q->next;
}
}
return q;
}
};

15.输入一个链表,反转链表后,输出链表的所有元素。

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == nullptr) return pHead;
ListNode* fakeHead = new ListNode(-1); ListNode* p = pHead;
while (p) {
ListNode* fakeHead_next = fakeHead->next;
ListNode* p_next = p->next;
fakeHead->next = p;
p->next = fakeHead_next;
p = p_next;
}
pHead = fakeHead->next;
return pHead;
}
};

16.输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){
ListNode* fakeHead = new ListNode(-1);
ListNode* p = fakeHead;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
while(p1 && p2){
if(p1->val <= p2->val){
p->next = p1;
p1 = p1->next;
}else{
p->next = p2;
p2= p2->next;
}
p = p->next;
}
if(p1)
p->next = p1;
if(p2)
p->next =p2; return fakeHead->next;
}
};

17.输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
private:
bool doHasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if (pRoot2 == nullptr) return true;
if (pRoot1 == nullptr) return false; return ((pRoot1->val == pRoot2->val)
&& doHasSubtree(pRoot1->left, pRoot2->left)
&& doHasSubtree(pRoot1->right, pRoot2->right))
|| doHasSubtree(pRoot1->left, pRoot2)
|| doHasSubtree(pRoot1->right, pRoot2);
}
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if (pRoot2 == nullptr) //空树不是任意一个子树的子结构
return false;
return doHasSubtree(pRoot1,pRoot2); }
};

18.操作给定的二叉树,将其变换为源二叉树的镜像。

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void Mirror(TreeNode* pRoot) {
if(pRoot == nullptr) return; TreeNode* temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp; Mirror(pRoot->left);
Mirror(pRoot->right);
}
};

19.输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

class Solution {
private:
void printMatrix(vector<vector<int>>& matrix, vector<int>& res,
int circle) {
int endRow = matrix.size() - 1 - circle;
int endCol = matrix[0].size() - 1 - circle;
//从左到右
for (int i = circle; i <= endCol; i++) {
res.push_back(matrix[circle][i]);
}
//从上往下
for (int i = circle + 1; i <= endRow; i++) {
res.push_back(matrix[i][endCol]);
}
//从右往左
if (circle < endCol && circle < endRow) {
for (int i = endCol - 1; i >= circle; i--) {
res.push_back(matrix[endRow][i]);
}
}
//从下往上
if (circle < endCol && circle < endRow) {
for (int i = endRow - 1; i > circle; i--) {
res.push_back(matrix[i][circle]);
}
}
}
public:
vector<int> printMatrix(vector<vector<int>>& matrix) {
vector<int> res;
if (matrix.empty()) return res;
int rows = matrix.size();
int cols = matrix[0].size();
int circle = 0;
while (circle * 2 < rows && circle * 2 < cols) {
printMatrix(matrix, res, circle);
circle++;
}
return res;
}
};

20.定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

#include<cassert>
class Solution {
private:
stack<int> m_data;
stack<int> m_minVal;
public:
void push(int value) {
m_data.push(value);
if (m_minVal.empty() || value < m_minVal.top()) {
m_minVal.push(value);
} else {
m_minVal.push(m_minVal.top());
}
} void pop() {
assert(m_data.size() > 0);
m_data.pop();
m_minVal.pop();
} int top() {
assert(m_data.size() > 0);
return m_data.top();
} int min() {
assert(m_minVal.size() > 0);
return m_minVal.top();
}
};

剑指offer(11-20)编程题的更多相关文章

  1. ⛅剑指 Offer 11. 旋转数组的最小数字

    20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ...

  2. [剑指 Offer 11. 旋转数组的最小数字]

    [剑指 Offer 11. 旋转数组的最小数字] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5, ...

  3. 【Java】 剑指offer(11) 矩阵中的路径

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字 ...

  4. 剑指offer(20)包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...

  5. 剑指offer计划20( 搜索与回溯算法中等)---java

    1.1.题目1 剑指 Offer 07. 重建二叉树 1.2.解法 注释解法. 1.3.代码 class Solution { int[] preorder; HashMap<Integer, ...

  6. 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)

    面试 15:顺时针从外往里打印数字 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字.例如输入: {{1,2,3}, {4,5,6}, {7,8,9}} 则依次打印数字为 1.2.3. ...

  7. 剑指offer 面试20题

    面试20题: 题目:表示数值的字符串 题:请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123 ...

  8. [持久更新] 剑指offer题目Python做题记录

    第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...

  9. 【剑指Offer】俯视50题之1-10题

    面试题1赋值运算符函数  面试题2 实现Singleton模式  面试题3 二维数组中的查找   面试题4 替换空格   面试题5 从头到尾打印链表   面试题6 重建二叉树   面试题7 用两个栈实 ...

  10. 【剑指Offer】俯视50题之21 - 30题

    面试题21包括min函数的栈  面试题22栈的压入.弹出序列  面试题23从上往下打印二叉树  面试题24二叉搜索树的后序遍历序列  面试题25二叉树中和为某一值的路径  面试题26复杂链表的复制  ...

随机推荐

  1. Firefox mobile (android) and orientationchange

    Firefox for Android does not support the orientationchange event but you can achieve the same result ...

  2. svn数据的备份

    svnadmin dump -r 0:HEAD [项目名称]>[存储的文件名].dump

  3. jmeter测试mysql数据库之JDBC请求

    所有jmeter基本组件功能本文不做介绍.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连 ...

  4. 基于Quartz.net的远程任务管理系统 三

    在上一篇中,已经把服务端都做好了.那接下来就是Web的管理端了,因为很多时候服务器是有专门的运维来管理的,我们没有权限去操作,所以有个可以管理Job的工具还是很有必要的. Web管理端,我选择现在很成 ...

  5. web 给大家分享一个好玩的东西,也许你那块就用的到

    先看效果: 就这个效果.当你点击右上角的删除按钮,会删除掉item1. 上代码: <!DOCTYPE html> <html> <head> <meta ch ...

  6. Beginning Asp.Net Security 读书笔记-----XSS

    几个月前通过Veracode对代码进行动态和静态安全扫描,扫出了数以千计的安全bug,基本上都是top 10的,安全漏洞. 其中CWE80,CWE601数量最多.具体CWE的定义可参考http://c ...

  7. dockerfile 构建tomcat

    事先下载好tomcat和jdk的二进制包. 下载地址https://pan.baidu.com/s/1kWWHGEV 值得一说的是 tomcat的官方镜像 剪切了很多jdk和系统命令,所以生产环境建议 ...

  8. Http协议中关于Content-Length的解读【出现坑爹的视频中断】

    最近公司的视频设备在下载视频的时候,出现了很诡异的现象,在新旧服务器一样的tpp包,下载下来后,新服务器无法解析,旧服务器没问题.且tpp包并没有改动. 后面找了挺久,终于发现了视频下载的时候是断点续 ...

  9. php—Smarty-缓存1(25)

    一.            缓存原理: IE:将资源文件保存至本地 Smarty:将缓存保存到服务器 编译      <            缓存      <            静 ...

  10. “全栈2019”Java第一百零八章:匿名内部类与final关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...