1. 在一个m*n二维数组中,每一行都按照从左到右的递增顺排序,每一列都按照从上到下的顺序排序,请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。
1 2 8 9
2 4 9 12
4 7 9 12
6 8 11 15

杨氏矩阵。这题有更好的做法吗?O(m+n)是最好的吗?网上说的分治法只对m=n的情况吧。

 bool find(vector<vector<int> > &arr, int t) {
if (arr.empty() || arr[].empty()) return false;
int m = arr.size(), n = arr[].size(); int x = , y = n - ;
while (x < m && y >= ) {
if (t == arr[x][y]) return true;
else if (t > arr[x][y]) x++;
else y--;
}
return true;
}

变种1:

求第k个数,我觉得能想出来用堆就不错了。n路归并,O(klgn),就是维护一个堆。

 struct Num {
int val, row, col;
Num(int r, int c, int v) : val(v), row(r), col(c) {}
}; class Comparator {
public:
bool operator() (Num &n1, Num &n2) {
return n1.val > n2.val;
}
}; int findKthSmallest(vector<vector<int> > &arr, int k) {
if (arr.empty() || arr[].empty()) return false;
int m = arr.size(), n = arr[].size(); priority_queue<Num, vector<Num>, Comparator> mins;
for (int i = ; i < k && i < n; ++i) {
mins.push(Num(, i, arr[][i]));
}
for (--k; k; --k) {
Num top = mins.top(); mins.pop();
if (top.row < n - ) {
mins.push(Num(top.row + , top.col, arr[top.row + ][top.col]));
}
}
return mins.top().val;
}

这问题线性的比较难了。http://www.quora.com/How-can-you-efficiently-determine-the-k-th-maximum-element-in-a-MxN-sorted-matrix

可以用一个k大小的堆,O(klgk)。每次pop掉一个数,比如arr[i][j],然后把arr[i+1][j]和arr[i][j+1]进堆,代价是要有一个数组维护这个数是不是已经在堆里了。

变种2:

给定两个有序数组,长度分别为m和n,分别取出一个数再求和,共有m*n个数,求第k个和(从小到大)。

还是组成一个杨氏矩阵。

 int findKthSmallest2(vector<int> &arr1, vector<int> &arr2, int k) {
if (arr1.empty() || arr2.empty()) return false;
int m = arr1.size(), n = arr2.size(); priority_queue<Num, vector<Num>, Comparator> mins;
for (int i = ; i < k && i < n; ++i) {
mins.push(Num(, i, arr1[] + arr2[i]));
} for (--k; k; --k) {
Num top = mins.top(); mins.pop();
if (top.row < n - ) {
mins.push(Num(top.row + , top.col, arr1[top.row + ] + arr2[top.col]));
}
} return mins.top().val;
}

2 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。 (本题可以直接输出来,不用先还原出二叉树)

剑指offer?的更多相关文章

  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. express-10 表单处理

    从用户那里收集信息的常用方法就是使用HTML表单.无论是使用浏览器提交表单,还是使用AJAX提交,或是运用精巧的前端控件,底层机制通常仍旧是HTML表单. 向服务器发送客户端数据 向服务器发送客户端数 ...

  2. Codeforces Edu3 E. Minimum spanning tree for each edge

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  3. json时间格式化问题

    function jsonDateFormat(jsonDate) {//json日期格式转换为正常格式 try { var date = new Date(parseInt(jsonDate.rep ...

  4. WPF画线问题,几千条以后就有明显的延迟了。

      我现在是这么画的,class A { private GeometryGroup _lines; private Path _path; public A() {    _path.Data = ...

  5. ural 1144. The Emperor's Riddle

    1144. The Emperor's Riddle Time limit: 1.0 secondMemory limit: 4 MB Background In the olden times th ...

  6. windows自动修改ip的bat文件

    @echo off title --IP自动设置 -- MODE con: COLS=80 lines=30 color 0a :main cls echo 按提示操作 echo. echo 设置为无 ...

  7. 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法

    使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...

  8. NOIP 2012 Day2T2 借教室题解

    NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...

  9. Notification Once

    Notification Once 前段时间整理项目中的AppDelegate,发现很多写在- application:didFinishLaunchingWithOptions:中的代码都只是为了在 ...

  10. Lable得到自定义高度!

    方法1(系统):CGSize declabesize = [_questionDecLabel.text boundingRectWithSize:CGSizeMake(CGRectGetWidth( ...