2011淘宝笔试题!!!求答案。。。。。。

问题描述

题目: 一个整型数组里面存储的数据是正数,负数,零,求解数组中下标连续的一个片段使该片段的和是所有下标连续片段最大的???

解决方案

public class IntArray { //这是整型数组类(IntArray)的数据成员 ,即一个整型数组 public int[] data; //此类的构造函数法 public IntArray(int[] a) { data = a; } //打印数组,每十个一行 public void printArray() { int i = 0; foreach (int j in data) { Console.Write(" " + j); i++; if (i % 10 == 0) Console.WriteLine(); } } //用于返回数组中负数的个数 public int minusNumber() { int a = 0; foreach (int i in data) if (i < 0) a++; return a; } //整形数组的冒泡排序(采用大的沉底儿的方法) public int[] bubbleSort() { int temp; for (int i = 1; i < this.data.Length; i++) for (int j = 0; j < this.data.Length - i; j++) { if (data[j] > data[j + 1]) { temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } return data; } //从数组中剔除一个指定值的元素 a,不管它的重数有几次 ,返回剔除后的新数组(比原来少一个元素) public int[] ridOneElement(int a) { bool flag = false; int j = 0; int[] tempArray = new int[this.data.Length - 1]; foreach (int i in data) { if (i != a || flag) { tempArray[j] = i; j++; } if (i == a) flag = true; } return tempArray; } //此方法用于返回 当前 元素之后(包括当前)的第一个 正 元素 的 索引值,若 不存在则返回 -1 public int nextPositiveIndex(int currentIndex) { for (int i = currentIndex; i < this.data.Length; i++) if (data[i] > 0) return i; return -1; } //此方法用于返回 当前 元素之后(包括当前)的第一个 负 元素 的 索引值,若 不存在则返回 -1 public int nextMinusIndex(int currentIndex) { for (int i = currentIndex; i < this.data.Length; i++) if (data[i] < 0) return i; return -1; } //求一段连续元素的和 ,即两个索引之间(包括端点)的元素的和 public int sessionSum(int start, int end) { int sum = 0; for(int i=start;i<=end;i++) sum=sum+data[i]; return sum; } //给定一个整数数组,从中切出一个连续片段,保证其元素和最大 public ArraySession sliceMax() { int dataLength = this.data.Length;//缓存数组长度 //判断是不是数组内没有正整数,如果没有返回最大的非正数 int flag = 0; for (int i = 0; i < dataLength; ++i) { if (data[i] > 0) break; ++flag; } if (flag == dataLength) { int max1 = data[0], index = 0; for (int i = 0; i < dataLength; ++i) { if (data[i] >= max1) { max1 = data[i]; index = i; } } return new ArraySession(index, index, max1);//全为非正数时,一定从这一局返回。 } //下面是对数组内有正整数的情况考虑的 List<ArraySession> node = new List<ArraySession>(); for (int start = 0; start < dataLength; start++) { if (data[start] <= 0 || start != 0 && data[start - 1] > 0) continue;//起始点是非正数的或者前一个数是正数的,肯定不是最大序列,继续下一轮 for (int end = start; end < dataLength; end++) { if (data[end] <= 0 || end < dataLength -1 && data[end + 1] > 0)//先判断这个数是否为非正,再看下一个是否为正 continue;//终止点是非正数的或者 下一个点是正数的,肯定不是最大序列,继续下一轮 int sum = 0; for (int k = start; k <= end; k++) { sum = sum + data[k]; } node.Add(new ArraySession(start, end, sum)); } } int max2 = node[0].sum; ArraySession result=new ArraySession(0,0,0);//结构不可赋值为null关键字 foreach (ArraySession i in node) { if (max2 <= i.sum)//此处的等于很重要 { max2 = i.sum; result = i; } } return result; } }//////////////////////////////////public class ArraySession { public int start; public int end; public int sum; //构造函数 public ArraySession(int start, int end, int sum) { this.start = start; this.end = end; this.sum = sum; } //打印此段的基本信息 public void sessionPrint() { Console.WriteLine("此段的开端索引值为"+start); Console.WriteLine("此段的结尾索引值为"+end); Console.WriteLine("此段的元素之和为"+sum); } }//////////////////////////////// class MainClass { //主函数 ,程序的入口点 ,此类主要用作调试函数 static void Main(string[] args) { //int[] array = new int[10] { -1, -2, -1, -2, -3, -4, -5, -6,-7, -8 }; //new IntArray(new Mathlet().arrayMultiMax(array)).printArray(); //Console.WriteLine(new Mathlet().triFibonacci(BasicFunctions.intInput("请输入一个整数"))); //Console.ReadKey(); //new ArraySession(1, 2, 3).sessionPrint(); int[] array = new int[10] { 1, 2, -1, 2, -3, 4, -2, 6, -7, -8 }; new IntArray(array).sliceMax().sessionPrint(); Console.ReadKey(); } }
解决方案二:
偶错了-。-没看清题目-。-
解决方案三:
public static void main(String[] args) {// TODO Auto-generated method stubint[] dataSource = new int[] { 1, -1, 3, 4, 5, 6, 0, 9, -3, 8, 3, 2,34, 3, 2, -3, 9 };String a = "a";// 用于替换小于等于0的数字String s = replaceAllLeZero(dataSource, a);String[] ss = s.split(",a,");String maxS = maxString(ss);String[] maxss = maxS.split(",");for (String ms : maxss)System.out.print(ms+",");}private static String maxString(String[] ss) {// TODO Auto-generated method stubString maxS = null;int sum = 0;int index = 0;int cc = 0;for(int i=0;i<ss.length;i++){cc = cacl(ss[i]);if(cc >= sum){sum = cc;index = i;}}return ss[index];}private static int cacl(String str) {// TODO Auto-generated method stubString[] ss = str.split(",");int sum = 0;for(String s : ss){sum += Integer.valueOf(s);}return sum;}private static String replaceAllLeZero(int[] dataSource, String replacer) {// TODO Auto-generated method stubStringBuilder sb = new StringBuilder();for (int i : dataSource) {if (i <= 0)sb.append(replacer);elsesb.append(i);sb.append(",");}int index = sb.lastIndexOf(",");if (index != -1)sb.deleteCharAt(index);return sb.toString();}
解决方案四:
我觉得应该先把0和小于0的数字替换成非字符,然后把这个数组拼成一个字符串,然后用regx截断。。。然后再计算个片段(要保存该片段原始位置)的值,求出最大的一个片段。。就好了吧。。。
解决方案五:
变成Java代码,只需改个别地方,这是我以前写过的一个问题。

时间: 2024-08-30 10:54:42

2011淘宝笔试题!!!求答案。。。。。。的相关文章

几行代码解决淘宝面试题之Clojure版

  我估计我不写这样的标题,吸引不了人气.问题的起因是Javaeye的一个帖子<淘宝面试题:如何充分利用多核CPU,计算很大的 List中所有整数的和>,看见为了这么个问题写长长的Java代码,让我十分蛋疼.为了表示蛋定,我想介绍下用Clojure解决这个问题的方法.     题目很明确了,要你充分多核,这年头不"多核"不好意思出去跟人打招呼,为了多核,你要将list拆分下,每个子list并发去计算和,然后综合这些结果求出最终的和,您没搞错,这不是传说中人见人爱的MapRe

剑指Offer之淘宝面试题之小白鼠与毒药解题过程分析

网上流传着一题淘宝面试题,原题如下: 我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常.现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分().A:5, B:6, C:31, D:32. +1只小白鼠首先可以想象只有1只小白鼠的情况,毫无疑问,1只小白鼠五分钟只能判断1瓶液体的成分,喝两瓶或以上如果是碰不到毒药,则喝多少瓶也能确定多少瓶:但如果遇到有毒药的瓶子,则不能判断那1瓶是毒药

2011淘宝客操作正规站群需要注意的三点

2011年2月22日百度大地震中大批量地处理了站群,可谓是对用黑帽的手法做站群的朋友们当头一捧.其中,有的朋友肯定捞到了一笔,但也有人刚操作站群就不给力了,原因是百度已经有所动作,就拿我的一个朋友来说吧,他操作的.info的站群现在根本就不收录,最后损失也是挺惨重的.也许,百度对这个后缀的域名已经进行降权的处理了.大家都知道做淘宝客不能只满足一个月几百上千,我们所要做的是不断地提高自己的淘宝客收入.那么,我们操作站群也就是我们冲刺淘宝联盟收入龙虎榜的一种最快捷的方式.那么,对于左旋式的站群显然是

由一道淘宝面试题到False sharing问题

今天在看淘宝之前的一道面试题目,内容是 在高性能服务器的代码中经常会看到类似这样的代码: typedef union { erts_smp_rwmtx_t rwmtx; byte cache_line_align_[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(erts_smp_rwmtx_t))]; }erts_meta_main_tab_lock_t; erts_meta_main_tab_lock_t main_tab_lock[16]; 请问其中用来填充的c

Spring,hibernate,struts经典面试笔试题(含答案)_java

本文讲述了Spring,hibernate,struts经典面试笔试题及其参考答案.分享给大家供大家参考,具体如下: 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: ① . 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代

马云:曾预言2011淘宝必有一难 已经习惯抢跑

阿里巴巴CEO马云 "2011年,淘宝必有一难." 去年年底,马云发出过令人意外的预言. 2011年10月间,谶语成真:因大幅提高淘宝商城商户收费标准,淘宝网遭遇反淘宝联盟的猛烈围攻:被马云寄望于打造完整的电商生态系统的一淘网,则遭遇京东商城.当当等多家知名电商的屏蔽.一时间,狼烟突起,马云再次因为抢跑而惨遭围城,颇为不堪. 过去十年间,马云以最快的速度布下了一个难攻易守的电商大阵,但现在的局面仍让人担忧.马云袒露心声:"自己只是个商人,从杭州起来的凡人,只想做商人该做的事真

[历年IT笔试题]2014年创新工场校园招聘笔试题及答案

2011年新人站长淘宝客的几点思路

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;  刚才在站长网等网站看到高亮久的文章<高亮久:教你几招 寻找赚钱项目的秘方>,豁然开朗,最近笔者给大家收集了一些适合新人淘宝客推广的方案,还请大家多多给出批评意见.     1.给购物网站或者网站的购物频道投稿( 里面的商品链接可以加上自己的pid)     2.在 猪八戒等威客网站拿100元发一个任务,任务可以是自己淘宝客网站的QQ签名,可是是 百度知

SNS营销实例:万人晒爱“淘宝情人节告白季”

收到6000条评论和7000余条@官方博客的消息,超过10000人次参加,吸引到60000多名粉丝关注.2月9日至14日,"2011淘宝情人节告白季"活动,在淘江湖社区和新浪微博上引起了轰动,被誉为情人节网络互动的典范,更被业内人士称为史上最牛SNS营销. 在2011年的情人节,淘宝网联合新浪微博推出"情人节晒表白"活动,在淘江湖和新浪微博征集情人节告白. 网友不但可以让数亿网友看到你的表白,而最终被评为最温馨.最浪漫.最搞怪.最肉麻.最别致表白的参与者,将获得钻石