思路与代码

by admin on 2020年1月25日

思路没弄明白之前,硬着头皮看代码,越看越糊涂;不说能马上看懂代码作者的思路,但至少有自己的思路:如果是我,将如何实现这功能?然后,在看代码的过程中,比较自己的思路和作者的思路,看代码就如坐春风了…

要回答三个问题

为什么会延期··
怎么样延期
怎么样不延期

Question:

看书看问题,没有自己的主见,那就被人家牵着鼻子走;看代码没有一个思路,智慧就少了启迪与交锋!

为什么会延期

1.因为模板的缺乏。之前没有做过,感觉设计的思路可以很多,然后自己和自己闹了分歧,觉得这个不对,那个不对。这个是自己对需求理解的模糊的问题,所以我后来增加了
原型设计工具Axure和 画图设计工具PowerDesigner.
2.因为一开始没有考虑到大数据量的问题。这个大数据是在git上看到了作者的大数据测试才意识到这个问题
3.因为没有总结好系统的几个模版。导致卡了一阵时间

Say you have an array for which the ith element is the price of a given
stock on day i.

 

怎么样延期

最最重要的原因,是因为改BUG,因为之前对系统的架构理解不熟悉。所以导致这次时间上的浪费。,因为自己不停认为是系统问题,所以导致自己·····坑了不少时间,现在发现了改BUG的一点小技巧
首先:第一步,是确定自己出没吹问题到出问题期间,自己做了什么
第二步:代码排查,什么System.out.println大法啊,debug断点啊。缩小范围
第三步:排查原因。
第四步:如果在第一步没发现问题,那么放到更大的范围里

第二就是自己开发功能时,首先要做的不是找模版,而是,有自己的业务流程图。再找别人的业务流程图。这样是提高自己的设计能力,和更容易理解别人代码的基础。

还是这句话PERBP。再阅读别人也用PERBP用纸写,感觉自己逻辑好多了。
PERBP( )

Design an algorithm to find the maximum profit. You may complete as many
transactions as you like (ie, buy one and sell one share of the stock
multiple times). However, you may not engage in multiple transactions at
the same time (ie, you must sell the stock before you buy again).

思路不清楚之前,不应该写代码,否则越写越糟糕… …

怎么样不延期

1.一个番茄钟先3个测试案例。

2.开发功能时,原则自己先试着想自己怎么写这个功能,然后查类似功能的业务,(先项目,后百度),如果比较相符,那就模仿改,否则。

那就需求分析(用户要完成输入什么输出什么),概要设计(如果从代码层次怎么实现),技术调研(有什么工具我用什么比较方便),数据库设计(要设计到什么),详细设计(大问题化解小问题产出伪代码),单元测试,开始编码,回归测试。

总结一下是XYYWW 先YY后伪代码后写。
需求设计,用户故事(用例图),原型设计,写伪代码,再写代码。

用户故事 用例图 bs图 架构图 model图 伪代码,example code return

在过程中出现问题,解决方案是(越简单越好),例如设计出了问题,之前说想把action分表。

3.不要抱怨,那是因为你的大问题化成小问题没做好。

逻辑线因为测试案例和逻辑推理才会想好


更新于2017-1-20-11:17

首先,怎么样做到不延期基本上是全部没有实现的,因为老是想着快点写代码快点写好代码。
这可能也是菜鸟的一个部分。

第二,先想好测试案例,其实确实是好,但是很多时候,自己大部分都是从一个测试案例就开始

My code:

public class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length < 2) return 0; boolean isInMode = false; int i = 0; int max = 0; int tempMax = 0; while (i < prices.length) { for (int j = i + 1; j < prices.length; j++) { if (prices[j] <= prices[i] && !isInMode) { i = j; tempMax += max; max = 0; if (i == prices.length - 1) return tempMax; else break; } else if (prices[j] > prices[i] || isInMode) { if (prices[j] < prices[j - 1] && isInMode) { isInMode = false; i = j; tempMax += max; max = 0; if (i == prices.length - 1) return tempMax; else break; } if (prices[j] > prices[i]) { if (j - i == 1) isInMode = true; if (max < prices[j] - prices[i]) max = prices[j] - prices[i]; if (j == prices.length - 1) return max + tempMax; } } } } return 0; } public static void main(String[] args) { Solution test = new Solution(); int[] prices = {6, 1, 3, 2, 4, 7}; System.out.println(test.maxProfit; }}

My test result:

图片 1Paste_Image.png

这次比较难。需要多次算盈利。然后又是写了好多if语句。这是不好的习惯。写的也很痛苦。这个程序应该分为三种状态。

图片 2Paste_Image.png

图片 3Paste_Image.png

图片 4Paste_Image.png

然后我根据三种状态来构造程序。实现要求。

之后我看了别人的思路,发现完全没有这么复杂。这也是我的一个问题,总是把问题想复杂,站的角度不对,导致写的代码很复杂。记住,
code is simple. The world is
simple.怎么样的思路呢?就是数组中后面的减前面的,如果小于0,就抛弃,继续遍历。如果大于0,则将差值加入。具体实现,我借了别人的图。

图片 5Paste_Image.png

**总结:还是那个说法,
写代码前先仔细想想,到底该用什么思路去解决。这次一开始是为了偷懒,所以想直接改改之前的代码。所以思路被局限在了上一道题目,导致这道题目越想越复杂。**Anyway,
Good luck, Richardo!

My code:

public class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length <= 1) return 0; int max = 0; for (int i = 1; i < prices.length; i++) { if (prices[i] >= prices[i - 1]) { max += prices[i] - prices[i - 1]; } } return max; }}

和以前的代码一比,感觉好清爽。。。

Anyway, Good luck, Richardo!

这道题目已经做烂了。。。Anyway, Good luck, Richardo! — 08/11/2016

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图