一来就给LeetCode跪了

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


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


一来就给LeetCode跪了_第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”

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

一来就给LeetCode跪了_第2张图片


总结一下:

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

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

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

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

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

你可能感兴趣的:(LeetCode,OJ)