滴滴出行2016校招编程题

1. 给定一个m*n的数组(m,n>=2,数组值>=0),要求选出和最大的子2*2数组。例如:

1 2 3

4 5 6

7 8 9

显然和最大的2*2子数组是5 6;8 9.下面完成这个功能。

Input: (m*n的数组)

            1 2 3 ; 4 5 6 ; 7 8 9

Output: (最大的和)

              28

解析:这个问题我觉得有两个难点,第一个就是二维数组的生成,初始时刻给了我们一行字符串,格式如上。我们需要从中读取二维数组,第二个就是核心算法,这里我们使用暴力解法,两行两列地逐步向后向下推进,直到找到最大的和。

代码: 

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
using namespace std;vector<string> split( string str,  string pattern)//分割字符串,分隔符是pattern
{vector<string> result;str += pattern;//扩张字符串以方便操作string::size_type pos;int n = str.size();for (int i = 0; i < n;i++){pos = str.find(pattern, i);if (pos<n){string s = str.substr(i, pos - i );result.push_back(s);i = pos +pattern.size()- 1;}}return result;}
int main()
{//读取二维数组string str;getline(cin, str);vector<string> vecstr = split(str, ";");//第一次分割int m = vecstr.size();//m行int n;//列数vector<vector<int> > arr(m);for (int i = 0; i < m;i++){vector<string> vecstr2 = split(vecstr[i]," ");n = vecstr2.size();arr[i].reserve(n);for (int j = 0; j < n; j++){arr[i].push_back(atoi(vecstr2[j].c_str()));}}//找到最大的和int maxsum = 0;int row , column ;for (int i = 0; i < m - 1; i++)for (int j = 0; j < n - 1; j++){int sum = arr[i][j] + arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1];if (maxsum < sum){row = i;column = j;maxsum = sum;}}cout << "最大的子数组是:" << endl;cout << arr[row][column] << "\t" << arr[row][column + 1] << endl;cout << arr[row + 1][column] << "\t" << arr[row + 1][column + 1] << endl;cout << "最大的和是" << maxsum << endl;}
结果:
1 2 3;4 5 6;7 8 9
最大的子数组是:
5       6
8       9
最大的和是28
请按任意键继续. . .


2.已知有一个数组,有正数、负数、0,要求输出和为0的最长连续子数组。

Input: -1 0 1 2 -1 -2 3 4 -4 

Output: 0 1 2 -1 -2 

解析:

          定义i,j,让i从前往后遍历,在i确定的时候,让j从后往前遍历,直到遇到第一个为0的时候停下来,计算i,j之间的距离,然后i继续遍历,选最长的即可。同时为了节约时间,一旦有一种情形的长度超过整体长度的一半,则i只需遍历到整体的前一半即可。

代码:

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <sstream>
#include <numeric>
using namespace std;
typedef vector<int> vecint;
vecint max_subarray(string str)
{stringstream s(str);vecint data,subdata;data.reserve(str.length());int t;while (s>>t){data.push_back(t);}int n = data.size();int disnum = 0;int low=-1, high=-1;for (int i = 0; i < n;i++){if (i >= n / 2 && disnum >= n / 2){break;}int sum = accumulate(data.begin() + i, data.end(), 0);int j = n - 1;while (sum!=0&&j>=i){sum -= data[j--];}if (sum == 0 && (disnum<(j - i + 1))){disnum =j - i + 1;//子数组的长度low = i;high = j;}}if (disnum!=0){for (int k = low; k <= high; k++){subdata.push_back(data[k]);}}return subdata;}int main()
{string str;getline(cin, str);vecint subarray = max_subarray(str);if (subarray.empty()){cout << "there's not such subarray that sum equals to zero" << endl;}else{cout << "Result has founded:" << endl;copy(subarray.begin(), subarray.end(), ostream_iterator<int>(cout, " "));}
}

结果:

-1 0 1 2 -1 -2 3 4 -4
Result has founded:
0 1 2 -1 -2 请按任意键继续. . .













本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天一个linux命令(22):find 命令的参数详解

find一些常用参数的一些常用实例和一些具体用法和注意事项。 1&#xff0e;使用name选项&#xff1a; 文件名选项是find命令最常用的选项&#xff0c;要么单独使用该选项&#xff0c;要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件&#xff0c;记住要用引号将文件…

(WPF) DataGrid之绑定

通过ObservableCollection 绑定到 DataGrid. 1. 前台Xaml. <DataGrid x:Name"dgMeasurements"HorizontalAlignment"Left"Margin"10,69,0,10"ItemsSource"{Binding}"AutoGenerateColumns"False"Width"370">…

程序=数据结构+算法

这句名言&#xff0c;我现在品来很有感觉&#xff0c;看看uc/os-II里面那些就绪表、查找最高优先级任务等等&#xff0c;算法设计的非常巧妙&#xff0c;整个OS都是围绕着OS_TCB来运转的&#xff0c;任务需要通信&#xff0c;那就在建立个OS_EVENT&#xff0c;通过.*OSTCBEvent…

去哪笔试两题

1&#xff0c;a是一个有序数组&#xff0c;但经过向右移动数位&#xff0c;现在预在a中查找元素key的位置&#xff0c;如不存在&#xff0c;返回0。例如a[5,6.7.8,1,2,3,4]. 实现&#xff1a; 1 #quna12 def findPos(a,key):3 mina[0];4 for i in range(len(a)):5 …

MySQL5.6主从复制搭建基于日志(binlog)

什么是MySQL主从复制 简单来说&#xff0c;就是保证主SQL&#xff08;Master&#xff09;和从SQL&#xff08;Slave&#xff09;的数据是一致性的&#xff0c;向Master插入数据后&#xff0c;Slave会自动从Master把修改的数据同步过来&#xff08;有一定的延迟&#xff09;&…

opengl 如何加阴影_动漫嘴唇厚涂如何绘制?厚涂嘴唇正确画法

动漫嘴唇厚涂如何绘制&#xff1f;厚涂嘴唇正确画法&#xff01;嘴巴怎么画&#xff1f;画嘴巴真的很考验一个画师功力&#xff0c;好看的嘴巴生动而丰满&#xff0c;可以给整幅画作添上亮点&#xff0c;而画的不好的嘴巴呢&#xff0c;就容易把画面整体的风格打破。那么零基础…

位运算

我们复习一下位运算&#xff0c;这里介绍一下(& ,|, ^)的用途。 按位与 ------------& 规则&#xff1a; 0&00 0&10 1&0 0 1&11 &#xff08; 两位为1&#xff0c;才是1&#xff09;作用&#xff1a; 清零与保位。通常用来将特定的位清零&…

详解JMeter函数和变量

详解JMeter函数和变量&#xff08;1&#xff09; JMeter函数可以被认为是某种特殊的变量&#xff0c;它们可以被采样器或者其他测试元件所引用。函数调用的语法如下&#xff1a; ${__functionName(var1,var2,var3)} 其中&#xff0c;__functionName匹配被调用的函数名称。用圆括…

信号反射

突然想起来前几天调试CAN通讯的时候出现的BUG&#xff0c;那就是传说中的“信号反射”&#xff0c;也有称“振铃”的。错误刚出现的时候没有意识过来&#xff0c;还说怎么出现重复出现这么多条消息呢&#xff1f;光在书本上看到过这个概念&#xff0c;没有“实物”与之对应起来…

hdu 5199 map或二分或哈希

题目描述&#xff1a;给出n棵树的高度&#xff0c;每棵树上都站着一只鸟&#xff0c;枪手Jack站在最左边那棵树的左边对鸟进行射击&#xff0c;当Jack在高度为H的地方向右发射一颗子弹的时候&#xff0c;高度为H的树上的鸟儿就会掉落&#xff08;注&#xff1a;其他树上的鸟儿不…

数字电路实验怎么接线视频讲解_家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接?手把手教你...

家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接&#xff1f;手把手教你有不少用户收到从家庭影院器材之后&#xff0c;表示完全不会连接。翻看说明书也觉得头大&#xff0c;知识太多&#xff0c;然而却很难找到要点。今天主要跟大家讲讲如何连接音箱、功放、投影机和影…

.NET开发过程中的全文索引使用技巧之Solr

前言&#xff1a;相信许多人都听说过.net开发过程中基于Lucene.net实现的全文索引&#xff0c;而Solr是一个高性能&#xff0c;基于Lucene的全文搜索服务器。同时对其进行了扩展&#xff0c;提供了比Lucene更为丰富的查询语言&#xff0c;同时实现了可配置、可扩展并对查询性能…

关于字符的读入与输出

在笔试中&#xff0c;经常见到字符的读入与输出的题目。逆序打印输入时最常见、最基本的考题&#xff0c;复杂点的就是统计单词、逆序打印单词之类的。难点是如何判断输入的结束&#xff0c;如果用getchar函数&#xff0c;其输入结束符为EOF&#xff08;其打印值为-1&#xff0…

修正discuz发帖首次换行无效的问题

找遍了百度和google都没有解决方案&#xff0c;连discuz官方都没有出来解决&#xff0c;至今其官网仍有这个问题。 那就自己动手解决吧&#xff0c;顺手打个补丁。虽然走了小路&#xff0c;但是能解决问题。 解决方案&#xff1a;修改static/js/bbcode.js 找到 html2bbcode()方…

auto.js停止所有线程_Java线程与并发编程实践:深入理解volatile和final变量

同步有两种属性&#xff1a;互斥性和可见性。synchronized关键字与两者都有关系。Java同时也提供了一种更弱的、仅仅包含可见性的同步形式&#xff0c;并且只以volatile关键字关联。假设你自己设计了一个停止线程的机制(因为无法使用Thread不安全的stop()方法))。清单1中Thread…

项目实例改编:利用structs2的action 实时显示图片、pdf和其他内容的框架抽取。(转)...

转自&#xff1a;http://www.verydemo.com/demo_c167_i1382.html 针对&#xff1a;预览文件&#xff08;图片&#xff0c;PDF&#xff09;文件来源为action中的inputStream 重点&#xff1a; structs2的action的配置 action的写法和结果类型 resulttype的写法 网页上实…

零碎的小知识点 ----------C# ToString()函数注意事项

C#中存在着大量的字符串操作&#xff0c;有专门的string类&#xff0c;各种各种的方法&#xff0c;其中使用最为频繁的方法为ToString()&#xff0c;用起来很是顺手&#xff0c;但是这里存在一个很大的问题&#xff0c;空字符是不能用ToString方法转换的&#xff0c;不然就会报…

ios越狱系统UIGestureRecognizer事件截获问题

越狱的机器给self.view设置一个UITapGestureRecognizer,这货就把所有的点击事件全截获了,比如某个按钮,点击就没效果.普通系统是没有问题的. 因此要给UIGestureRecognizer设置delegate并且在其中对touch的view进行分别处理 比如要让按钮功能正常使用: 1 #pragma mark - UIGestu…

开始Go开发之旅-Golang架构师之路系列实战

2019独角兽企业重金招聘Python工程师标准>>> 作者: gomaster.me(冯琪超) 系列:Golang架构师之路 巧妇难做无米之炊&#xff0c;golang sdk就是gopher的大米 下载golang 点击 官网下载golang sdk 根据不同系统&#xff0c;官网下载链接会选择相应的平台进行链接跳转&…

delete与delete[]的区别

一直对C中的delete和delete[]的区别不甚了解&#xff0c;今天遇到了&#xff0c;上网查了一下&#xff0c;得出了结论。做个备份&#xff0c;以免丢失。 C告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete&#xff0c;回收用 new[] 分配的一组对象的内存空间的时…