二维数组中的查找

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路分为两种:

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的更多相关文章

  1. 剑指Offer面试题:1.实现Singleton模式

    说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...

  2. 剑指Offer面试题:14.链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  3. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  4. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 面试题目——《剑指Offer》

    1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...

  7. 剑指offer习题集2

    1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...

  8. 剑指offer习题集1

    1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...

  9. 剑指Offer:面试题20——顺时针打印矩阵(java实现)

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

  10. 牛客网上的剑指offer题目

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

随机推荐

  1. 9.4-6 kill & killall & pkill

    kill:终止进程 能够终止你希望停止的进程. kill 命令的参数选项及说明 -l    列出全部的信号名称 -p    指定kill命令只打印相关进程的进程号,而不发送任何信号 -s    指定要 ...

  2. 【补档STM32】STM32F103俄罗斯方块游戏实现

    项目地址:https://gitee.com/daycen/stm32-tetris/tree/master 使用Keil uVision5打开即可 一.概述 ​ 本文介绍了一个基于STM32的俄罗斯 ...

  3. Nginx 配置实例-配置高可用

    Nginx 配置实例-配置高可用 1. 实现效果 2. 两台机器 nginx 的安装 2.1 192.168.25.120 中 nginx 的安装 2.1.1 安装 pcre 依赖 2.1.2 安装其 ...

  4. .Net之简单通知服务

    开篇语 这两天看见有大佬分享使用钉钉和企业微信的机器人来做通知报警,然后我想到了我使用的另一个第三方软件捷易快信(可能大家都不知道这个东西,我也忘了我最开始是咋知道的),该服务的优点是可以通过微信进行 ...

  5. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

  6. Mobileye 自动驾驶策略(一)

    Mobileye 自动驾驶策略(一) 详解 Mobileye 自动驾驶解决方案 Mobileye的自动驾驶解决方案.总得来说,分为四种: Visual perception and sensor fu ...

  7. python_reques接口测试框架,Excel作为案例数据源

    一.框架菜单 1.1 common模块  1.2 其他 二.Excel接口测试案例编写 三.读取Excel测试封装(核心封装) excel_utils.py  读取Excel中的数据 import o ...

  8. MySQL慢查询日志如何开启以及分析

    1.MySQL慢查询日志是什么 (1)MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中查询时间超过(大于)设置阈值(long_query_time)的语句,记录到慢查询日志 ...

  9. 权限管理(基本权限、附加权限、ACL权限)

    基本权限 •访问方式(权限) 读取:允许查看内容-read   r 写入:允许修改内容-write    w 可执行:允许运行和切换-execute  x 对于文本文件 r: cat   head  ...

  10. Pytorch CNN网络MNIST数字识别 [超详细记录] 学习笔记(三)

    目录 1. 准备数据集 1.1 MNIST数据集获取: 1.2 程序部分 2. 设计网络结构 2.1 网络设计 2.2 程序部分 3. 迭代训练 4. 测试集预测部分 5. 全部代码 1. 准备数据集 ...