剑指offer(1-10)编程题
1 .在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- class Solution{
- public:
- bool Find(int target,vector<vector<int>>& matrix){
- if(matrix.empty()) return false;
- bool found = false;
- int m = matrix.size();
- int n = matrix[].size();
- int row = ;
- int col = n -;
- while(row < m && col >= ){
- if(matrix[row][col] == target){
- found = true;
- break;
- }else if (target > matrix[row][col]){
- row++;
- }else {
- col--;
- }
- }
- return found;
- }
- };
2.请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- class Solution {
- public:
- void replaceSpace(char *str, int length) {
- int spaceCount = ;
- for (int i = ; i < length; i++) {
- if (str[i] == ' ') {
- spaceCount++;
- }
- }
- if (spaceCount == )
- return;
- int p = length - ;
- int q = length + spaceCount * - ;
- while (p < q) {
- if (str[p] != ' ') {
- str[q--]=str[p--];
- }else{
- p--;
- str[q--] = '';
- str[q--] = '';
- str[q--] = '%';
- }
- }
- str[length+spaceCount*] = '\0';
- }
- };
3.输入一个链表,从尾到头打印链表每个节点的值。
- class Solution {
- public:
- vector<int> printListFromTailToHead(ListNode* head) {
- vector<int> res;
- stack<int> stack;
- ListNode* p = head;
- while(p != nullptr){
- stack.push(p->val);
- p = p->next;
- }
- while(!stack.empty()){
- res.push_back(stack.top());
- stack.pop();
- }
- return res;
- }
- };
4.输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
- /**
- * 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* reConstructBinaryTree(vector<int>& pre, vector<int>& vin) {
- if (pre.empty()) return nullptr;
- TreeNode* root = new TreeNode(pre[]);
- vector<int> leftPre, leftVin;
- vector<int> rightPre, rightVin;
- for (int i = ; i < vin.size(); i++) {
- if (vin[i] != pre[]) {
- leftVin.push_back(vin[i]);
- leftPre.push_back(pre[i + ]);
- }else{
- break;
- }
- }
- int leftSize = leftVin.size();
- for (int i = leftSize+; i < vin.size(); i++) {
- rightVin.push_back(vin[i]);
- rightPre.push_back(pre[i]);
- }
- root->left = reConstructBinaryTree(leftPre, leftVin);
- root->right = reConstructBinaryTree(rightPre, rightVin);
- return root;
- }
- };
5.用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- class Solution {
- public:
- void push(int node) {
- stack1.push(node);
- }
- int pop() {
- int res;
- if (stack2.empty()) {
- while (!stack1.empty()) {
- stack2.push(stack1.top());
- stack1.pop();
- }
- }
- if (stack2.empty()) {
- return -; // no data
- } else {
- res = stack2.top();
- stack2.pop();
- }
- return res;
- }
- private:
- stack<int> stack1;
- stack<int> stack2;
- };
6.把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
- class Solution {
- public:
- int minNumberInRotateArray(vector<int> rotateArray) {
- int n = rotateArray.size();
- if (n == ) return ;
- if (n == ) return rotateArray[];
- int minVal = -;
- for (int i = ; i < n; i++) {
- if (rotateArray[i] < rotateArray[i - ])
- minVal = rotateArray[i];
- }
- if (minVal == -) {
- minVal = rotateArray[];
- }
- return minVal;
- }
- };
7.大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
- class Solution {
- public:
- int Fibonacci(int n) {
- if(n == ) return ;
- if(n == ) return ;
- int fibnMinusOne = ;
- int fibnMinusTwo = ;
- int fibn;
- for(int i=;i<=n;i++){
- fibn = fibnMinusOne + fibnMinusTwo;
- fibnMinusTwo = fibnMinusOne;
- fibnMinusOne = fibn;
- }
- return fibn;
- }
- };
8.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- class Solution {
- public:
- int jumpFloor(int number) {
- if (number == )
- return ;
- if (number == )
- return ;
- int fnMinusOne = ;
- int fnMinusTwo = ;
- int fn;
- for (int i = ; i <= number; i++) {
- fn = fnMinusOne + fnMinusTwo;
- fnMinusTwo = fnMinusOne;
- fnMinusOne = fn;
- }
- return fn;
- }
- };
9.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- class Solution {
- public:
- int jumpFloorII(int number) {
- return pow(,number-);
- }
- };
10.我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- class Solution {
- public:
- int rectCover(int number) {
- if(number <= ) return ;
- if (number == )
- return ;
- if (number == )
- return ;
- int fnMinusOne = ;
- int fnMinusTwo = ;
- int fn;
- for (int i = ; i <= number; i++) {
- fn = fnMinusOne + fnMinusTwo;
- fnMinusTwo = fnMinusOne;
- fnMinusOne = fn;
- }
- return fn;
- }
- };
剑指offer(1-10)编程题的更多相关文章
- 剑指offer 面试10题
面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1 ...
- 【剑指offer】10矩阵覆盖
原创博文,转载请注明出处! 0.简介 # 本文是牛客网<剑指offer>刷题笔记,笔记索引链接 1.题目 # 用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地 ...
- 剑指offer第10题
import java.util.Scanner; /* 前两种方法是看最低为是不是为1,不为1则向右移动. 第一种只能对正整数有效,对负数不行,因为负数用的是补码,最高外符号位为1,最后右移动,肯定 ...
- [持久更新] 剑指offer题目Python做题记录
第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...
- 【剑指Offer】俯视50题之21 - 30题
面试题21包括min函数的栈 面试题22栈的压入.弹出序列 面试题23从上往下打印二叉树 面试题24二叉搜索树的后序遍历序列 面试题25二叉树中和为某一值的路径 面试题26复杂链表的复制 ...
- 《剑指offer》第二十七题(二叉树的镜像)
// 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. #include <iostream> #include "BinaryTree ...
- 《剑指offer》第十七题(打印1到最大的n位数)
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...
- 《剑指offer》第十三题(机器人的运动范围)
// 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...
- 《剑指offer》第八题(重要!查找二叉树的中序遍历的下一个结点)
文件一:main.cpp // 面试题:二叉树的下一个结点 // 题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? // 树中的结点除了有两个分别指向左右子结点的指针以外,还有 ...
- 【校招面试 之 剑指offer】第16题 数值的整数次方
方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typ ...
随机推荐
- nancy中的身份验证
在nancy中,身份验证分为basic ,form ,token,stateless几种,basic和form这里不说了,其中如果是使用cookie来保存身份的, 需要注意的是:cookie有大小的限 ...
- .NET中Debug模式与Release模式差别
Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.Release 里的PDB是pdb-only,基本上:出什么错了+错误在哪行. 因为很多人把PDB理解成:调试文件.P ...
- Angularjs 通过directive实现验证两次输入是否一致的功能
实现效果: 1> 当输入确认密码时验证: 2> 当输入密码时验证: 实现步骤: 1.页面代码: <input class="form-control" type= ...
- /usr/bin/curl: Argument list too long的解决方法
使用curl发送http请求时,会出现-bash: /usr/bin/curl: Argument list too long的错误,此时,可用采用httpie代替curl发送请求: pip inst ...
- 使用jdbc的方式访问kylin cube的数据
使用jdbc的方式访问kylin cube的数据 引用kylin相关的jar包 <dependency> <groupId>org.apache.kylin</group ...
- [C#学习笔记]分部类和分部方法
知识在于积累. 前言 好久没写博客了,因为在看<CLR via C#>的时候,竟然卡在了分部方法这一小节几天没下去.今天重新认真阅读,有些感悟,所以在此记录. 然后. 每天早晨第一句,&l ...
- leetcode 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...
- Mysql修改字段类型
mysql 修改字段长度 alter table news modify column title varchar(130); alter table 表名 modify column 字段名 类型 ...
- PARTITION BY函数
1.PARTITION BY 开窗函数, 使用场景,在合同表里,获取所有房源在最新的合同编号.或者获取每个班级每次考试的第一名. 区别聚合函数:对于每个每个分组返回多行,而聚合函数对于每个分组只返回一 ...
- 如何进入PageAdmin CMS 安装界面
一般下面几个应用场景如第一次使用PageAdmin配置参数.服务器迁移.主域名更换.忘记超级管理员密码等都可以在安装界面进行设置. 下面为PageAdmin安装步骤 1.地址栏输入:http://您的 ...