博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一道算法题的一种O(n)解法
阅读量:5825 次
发布时间:2019-06-18

本文共 1463 字,大约阅读时间需要 4 分钟。

  同学发了一些文章 

 

 

很早就有去做做的想法,可是一直没动手

今天花了点时间搞搞

结果如下:

核心部分

 

 

复制代码
ExpandedBlockStart.gif
代码
 1  
public List<Result> GetResults(
int[] arr)
 2         {
 3             
//
输入有效性检测
 4 
            
if (arr.Length==
0)
 5                 
throw 
new NotEnoughInputException();
 6 
 7             List<Result> rlist = 
new List<Result>();
 8             
 9             
//
实际运算
10 
            
11 
            
//
初始化起始位置,将第一点当作后续结果的起点
12 
            Position startP = 
new Position(Position.EmptyPosition, arr[
0]);
13 
14             
//
当前点就当作是最大结果值
15 
            Result curResult = 
new Result(Position.EmptyPosition, startP);
16 
17             
//
向结果列表添加内容
18 
            rlist.Add(curResult);
19 
20             
//
有一个以上的数据
21 
            
if (arr.Length > 
1)
22             {
23                 Position curP,nextP;
24                 curP=startP;
25                 Result temp;
//
保存到目前点为止的结果数据
26 
                
//
从第二个点开始逐个判断
27 
                
for (
int i = 
1; i < arr.Length; i++)
28                 {
29                     
//
构造对象
30 
                    nextP = 
new Position(curP,arr[i]);
31                     temp = 
new Result(startP, nextP);
32 
33                     
//
判断当前的和是否大于现有结果列表中的数据
34 
                    
if (temp.RelativeElevation > rlist[
0].RelativeElevation)
35                     {
//
如果大于则清除结果列表,添加当前结果
36 
                        rlist.Clear();
37                         rlist.Add(temp);
38                     }
39                     
//
判断当前的和是否等于现有结果列表中的数据
40 
                    
else 
if (temp.RelativeElevation == rlist[
0].RelativeElevation)
41                     {
42                         rlist.Add(temp);
43                     }
44                     
//
判断当前是否是一个新的低点
45 
                    
else 
if(nextP.EndElevation<=startP.StartElevation)
46                     {
47                         startP = nextP;
48                     }
49                     curP = nextP;
50                 }
51             }           
52 
53             
return rlist;
54         } 
复制代码

 

 

 代码还有进一步优化的余地

主体思想就是模拟一个不断爬山的人,爬完一遍后要回答那座山和山谷的相对落差最大

 完整代码

 主要多用了些类,呵呵。

 局部代码有些不好理解,呵呵。比如里面关于全负数的处理。

欢迎拍砖  

 

作者:
出处:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

如有问题,可以通过 联系我,非常感谢。

分类: ,
标签: ,
本文转自徐少侠博客园博客,原文链接:http://www.cnblogs.com/Chinese-xu/archive/2010/02/21/1670672.html,如需转载请自行联系原作者
你可能感兴趣的文章
MyBatis使用DEMO及cache的使用心得
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
乐信Q2季报图解:调整后净利过5亿 同比增长776%
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
韩国国会议员涉嫌投机炒房 检方称已立案调查
查看>>
李娜入选国际网球名人堂 成亚洲第一人
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>
我从过去八个月的AI公司面试中学到了什么?
查看>>
jQuery实践小结
查看>>
深入探究Immutable.js的实现机制(一)
查看>>
jsp改造之sitemesh注意事项
查看>>
智能硬件的时代,嵌入式是否已经日薄西山
查看>>
单点登录(SSO)看这一篇就够了
查看>>
SpringBoot-Shiro使用
查看>>