剑指offer?
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?的更多相关文章
- 剑指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题目
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
随机推荐
- express-10 表单处理
从用户那里收集信息的常用方法就是使用HTML表单.无论是使用浏览器提交表单,还是使用AJAX提交,或是运用精巧的前端控件,底层机制通常仍旧是HTML表单. 向服务器发送客户端数据 向服务器发送客户端数 ...
- 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 ...
- json时间格式化问题
function jsonDateFormat(jsonDate) {//json日期格式转换为正常格式 try { var date = new Date(parseInt(jsonDate.rep ...
- WPF画线问题,几千条以后就有明显的延迟了。
我现在是这么画的,class A { private GeometryGroup _lines; private Path _path; public A() { _path.Data = ...
- 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 ...
- windows自动修改ip的bat文件
@echo off title --IP自动设置 -- MODE con: COLS=80 lines=30 color 0a :main cls echo 按提示操作 echo. echo 设置为无 ...
- 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法
使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...
- NOIP 2012 Day2T2 借教室题解
NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...
- Notification Once
Notification Once 前段时间整理项目中的AppDelegate,发现很多写在- application:didFinishLaunchingWithOptions:中的代码都只是为了在 ...
- Lable得到自定义高度!
方法1(系统):CGSize declabesize = [_questionDecLabel.text boundingRectWithSize:CGSizeMake(CGRectGetWidth( ...