TITANIC上的小景

之前的OJ战场在HackerRank,今天终于禁不住铺天盖地的诱惑,加入LeetCode大军

按照学编程就从“Hello world!”开始的尿性,刷OJ当然也从 1 号题出发

Aha~~~!看起来是非常简单的问题呢!

先来个暴力for for法!

什么?!不行?!

这我当然知道!玩玩儿你!

如果不对数组进行排序,那么对于一般的方法,必然是需要进行两两相加比较的(由不加证明的脑内剧场给出……)

好,排序。

<span style="font-family:Microsoft YaHei;">std::sort(numbers.begin(), numbers.end());</span>要输出序号,,当然要配合一个map

<span style="font-family:Microsoft YaHei;">std::map<int, int> index_num_map;</span>

可是这些思路形成后,想到了一些比较奇怪的问题。

如果输入是 [1,-2,7,-1,6], 5 怎么破?该输出 -2,7 的下标还是 -1,6 的下标?

大概是输出优先成对的吧

可是排序之后必然使得优先顺序打乱……

如果没有配对值,题目接口又必须返回一个vector,这个vector应该包含什么?

空的吧

又或者[0,0]吧

于是又否定了排序的思路,开始想着在原方法上简化

例如使用各种 if 手段跳过某些循环项

这么尝试了各种办法,N次(后面会看到,真的是很多次),还是不行

不过在这些试验中,通过错误数据渐渐发现是我想多了 ORZ……

日啊,审题审题!!!这个初中高中就被各科老师强调无数次的东西,还是中计了!!!

“YOU MAY ASSUME THAT EACH INPUT WOULD HAVE EXACTLY ONE SOLUTION”

说多了都是泪,直接造成最后我的提交就是这样的↓↓↓

总结一下:

1、LeetCode的题目确实别于其他的OJ,更加侧重于解决某个特殊的实际问题

2、函数接口给定,不需要自己写IO什么的,这点和第一条一致

3、代码无法直接复制进IDE调试,要么肉眼Debug(甚至连std::cout都不会输出!),要么自己动手写Client

4、正因为各种限定较多,更需要仔细阅读题目,理解题目

5、O(N^2)就是 O(N^2),不能指望通过 if 来降低复杂度。

大理的洱海形如人耳,风平浪静时,

TITANIC上的小景

相关文章:

你感兴趣的文章:

标签云: