《Cracking the Coding Interview》——第17章:普通题——题目6
2014-04-28 22:49
题目:给定一个整数数组。如果你将其中一个子数组排序,那么整个数组都变得有序。找出所有这样子数组里最短的一个。
解法:线性时间,常数空间内可以解决,思想类似于动态规划。通过正反扫描两次,可以得出这个区间的两端。只要存在i < j并且a[i] > a[j],那么这个区间[i, j]就必须被排序,为了在线性时间内完成算法,我们可以通过不断比较当前元素与当前最大(最小)元素来更新结果。请看代码。
代码:
// 17.6 Given an array, if you sort a subarray of it, the total array will become sorted. Find the length of the shortest of all such subarrays.
#include <cstdio>
#include <vector>
using namespace std; void findUnsortedSequence(vector<int> &v, int &left_index, int &right_index)
{
int n = v.size(); left_index = right_index = -;
if (n < ) {
return;
}
int val;
int i; val = v[];
for (i = ; i <= n - ; ++i) {
val = v[i] > val ? v[i] : val;
if (v[i] < val) {
right_index = i;
}
} val = v[n - ];
for (i = n - ; i >= ; --i) {
val = v[i] < val ? v[i] : val;
if (v[i] > val) {
left_index = i;
}
}
} int main()
{
vector<int> v;
int i;
int n;
int left_index, right_index; while (scanf("%d", &n) == && n > ) {
v.resize(n);
for (i = ; i < n; ++i) {
scanf("%d", &v[i]);
}
findUnsortedSequence(v, left_index, right_index);
printf("(%d, %d)\n", left_index, right_index);
v.clear();
} return ;
}
《Cracking the Coding Interview》——第17章:普通题——题目6的更多相关文章
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- 《Cracking the Coding Interview》读书笔记
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...
- Cracking the coding interview
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- Cracking the Coding Interview(Trees and Graphs)
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...
- Cracking the Coding Interview(Stacks and Queues)
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...
- 《Cracking the Coding Interview》——第18章:难题——题目13
2014-04-29 04:40 题目:给定一个字母组成的矩阵,和一个包含一堆单词的词典.请从矩阵中找出一个最大的子矩阵,使得从左到右每一行,从上到下每一列组成的单词都包含在词典中. 解法:O(n^3 ...
- 二刷Cracking the Coding Interview(CC150第五版)
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...
- 《Cracking the Coding Interview》——第17章:普通题——题目14
2014-04-29 00:20 题目:给定一个长字符串,和一个词典.如果允许你将长串分割成若干个片段,可能会存在某些片段在词典里查不到,有些则查得到.请设计算法进行分词,使得查不到的片段个数最少. ...
- 《Cracking the Coding Interview》——第17章:普通题——题目13
2014-04-29 00:15 题目:将二叉搜索树展开成一个双向链表,要求这个链表仍是有序的,而且不能另外分配对象,就地完成. 解法:Leetcode上也有,递归解法. 代码: // 17.13 F ...
随机推荐
- traffic_light_bag_file 数据集 下载链接
链接:https://pan.baidu.com/s/19p5aGRfs6iFtN_SWAxCkRQ 密码:v9wx
- ubuntu linux查看cpu信息
$ cat /proc/cpuinfo CPU核心数量 $ grep -c processor /proc/cpuinfo
- GNU Nano编辑器
^表示 control建 ^X 退出 nano ^O 保存文件 ^R 插入其他文件内容至光标位置 ^W 查找字符串 ^Y 跳至前一屏 ^V 跳至后一屏 ^K 剪切光标所在行并保存到剪贴板,或剪切选中内 ...
- 什么是DTO?
DTO: Data Transfer Object Wikipedia定义:Data transfer object (DTO)[1][2] is an object that carries dat ...
- EF分组后把查询的字段具体映射到指定类里面的写法
//先做基本查询 var querySql = from l in _logClinicDataOperationRepository.Table select new LogClinicDataOp ...
- Hive 配置显示表头和数据库信息
在 conf/hive-site.xml 中添加如下配置 <property> <name>hive.cli.print.header</name> <val ...
- theano提示:g++ not detected的解决办法
导入theano包后出现如下警告: WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execu ...
- Java中的逻辑运算符短路效应
在Java中逻辑运算符&& 和 ||,它们都存在短路效应. 对于a && b,只有当a和b同时为true时,整个表达式才为true(在java中,首先运算表达式a,如果 ...
- base64位 解码图片
jar包是commons-codec.jar. pnuts //base64解码成图片 function gldBase64ToImage(imgStr,imgFilePath) { // 对字节数组 ...
- LeetCode47.Permutations II(剑指offer38-1)
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...