剑指offer 1-5
二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路分为两种:
1.暴力两重遍历,挺好,一遍直接过了
2.根据题目所给出的有序性来快速定位我们想找的那个数,先找到行,再找到列
C++:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(!array.size())
{
return false;
}
int i=0,j=array[0].size()-1;
while(i<array.size()&&j>=0)
{
if(array[i][j]==target)
{
return true;
}else if(array[i][j]<target)//先跟最右上角的比较,如果大的话,向下移。
{
i++;
}else
{
j--; //之后找到这一行,再与这一列的进行比较。
}
}
return false;
}
};
PYTHON:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
row=len(array)
j=len(array[0])-1
i=0
while(i<row and j>=0):
if target>array[i][j]:
i++
elif target<array[i][j]:
j--
else return 'true'
return 'false'
# write code here
while True:
try:
S=Solution()
# 字符串转为list
L=list(eval(raw_input()))
array=L[1]
target=L[0]
print(S.Find(target, array))
except:
break
替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
遍历字符串,每到遇到空格时,就将后面的字符向右边移动2个位置,移动完后,再插入%20.
看评论区老哥,有的是新开一个字符串,我感觉挺秒的,具体直接看代码,不难
class Solution {
public:
void replaceSpace(char *str,int length) {
char *start =str;
while(*str!='\0')
{
if(*str==' ')
{
char *begin = start+length;
while(begin!=str)
{
*(begin+2)=*begin;
begin--;
}
*str='%';
*(str+1)='2';
*(str+2)='0';
str+=3;
}else
{
str++;
}
}
}
};
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null)
{
return null;
}
StringBuilder sb=new StringBuilder();
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)==' ')
{
sb.append("%");
sb.append("2");
sb.append("0");
}else
{
sb.append(str.charAt(i));
}
}
return sb.toString();
}
}
从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路:
从尾到头,这不是栈的性质吗,反转,遍历一遍链表,将指存入栈,再将值,pop出来,就完事了。
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> arraylist;
ListNode* begin = head;
stack<int> stk;
while(!begin)
{
stk.push(begin->val);
begin=begin->next;
}
while(!stk.empty())
{
arraylist.push_back(stk.top());
stk.pop();
}
return arraylist;
}
};
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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> in) {
int inlen=in.size();
if(inlen==0)
return NULL;
vector<int> left_pre,right_pre,left_in,right_in;
//创建根节点,根节点肯定是前序遍历的第一个数
TreeNode* head=new TreeNode(pre[0]);
//找到中序遍历根节点所在位置,存放于变量gen中
int gen=0;
for(int i=0;i<inlen;i++)
{
if (in[i]==pre[0])
{
gen=i;
break;
}
}
//对于中序遍历,根节点左边的节点位于二叉树的左边,根节点右边的节点位于二叉树的右边
//利用上述这点,对二叉树节点进行归并
for(int i=0;i<gen;i++)
{
left_in.push_back(in[i]);
left_pre.push_back(pre[i+1]);//前序第一个为根节点
}
for(int i=gen+1;i<inlen;i++)
{
right_in.push_back(in[i]);
right_pre.push_back(pre[i]);
}
//和shell排序的思想类似,取出前序和中序遍历根节点左边和右边的子树
//递归,再对其进行上述所有步骤,即再区分子树的左、右子子数,直到叶节点
head->left=reConstructBinaryTree(left_pre,left_in);
head->right=reConstructBinaryTree(right_pre,right_in);
return head;
}
};
两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
一个栈,时输入的数,会反转,因为先进后出嘛,而当我们有另一个栈时,我们可以将数,再输入进另外一个栈时,那么就可以当成队列来使用了,直接看代码吧。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
int result;
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
result=stack2.top();
stack2.pop();
return result;
}
private:
stack<int> stack1;
stack<int> stack2;
};
剑指offer 1-5的更多相关文章
- 剑指Offer面试题:1.实现Singleton模式
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
- 剑指Offer面试题:14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 《剑指offer》面试题11: 数值的整数次方
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
- 面试题目——《剑指Offer》
1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...
- 剑指offer习题集2
1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...
- 剑指offer习题集1
1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 牛客网上的剑指offer题目
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
随机推荐
- 简单读读源码 - dubbo多提供者(provider)配置方法
简单读读源码 - dubbo多提供者(provider)配置方法 消费者端dubbo的yml配置 dubbo: consumer: timeout: 300000 protocol: name: du ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护
dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关 ...
- wangEditor 轻量级富文本框编辑器使用方法
首先第一步先去wangEditor官网下载所需要的脚本文件! http://www.wangeditor.com/ 接下来先在你的项目的HTML标签里加上这样一段标签: 1 <body> ...
- Angel图算法
Angel图算法 [2.0]CommonFriends 计算两个好友的共同好友数,某种程度上可以刻画两个节点之间的紧密程度. 输入 输入数据路径:输入文件所在路径,无权网络数据, 数据格式为两列 sr ...
- AI+IoT+电池应用
AI+IoT+电池应用 AIoT电池 突破你的想象 将行业领先的电池电化学技术与前沿的能源物联网最佳实践相结合,利用智能物联技术开展电池全生命周期的管理优化和交叉领域的协同应用,解锁动力电池全生命周期 ...
- 番外篇:搭建Windows环境下的RabbitMQ环境
搭建Windows环境下的Rabbitmq环境 下载erlang语言包OTP.官网地址: https://www.erlang.org/downloads 如果下载不了,可以选择百度网盘下载,里面的版 ...
- QT Dialog模态与非模态
模态 // 创建对话框窗口 TestDialog* dlg = new TestDialog(this); // 阻塞程序的运行 dlg->exec(); 这样的话,当运行对话窗口的时候,会阻塞 ...
- 「题解」agc031_e Snuke the Phantom Thief
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 AT4695.AtCoder agc031_e. 题意简述 在二维平面上,有 \(n\) 颗珠宝,第 \(i\) 颗 ...
- Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide
大家好,我是 Guide哥!端午已过,又要开始工作学习啦! 我发现有很多小伙伴对认证授权方面的知识不是特别了解,搞不清 Session 认证.JWT 以及 Cookie 这些概念. 所以,根据我根据日 ...
- 【NX二次开发】Block UI 半径尺寸(沿曲线的位置)
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...