刚打算入门学习算法,遇到一题发现 PHP 果然是最好的语音

2018-03-22 13:31:11 +08:00
 qxy

http://www.lintcode.com/en/problem/longest-words/

朋友推荐的网站,但是,只支持 C++,JAVA,PYTHON2/3,因为是刚入门,所以,找了一题应该最简单的。

然而,楼主用的 php,其他不会,所以,自己在本地写了一手。

此题给了提示:

 遍历两次的办法很容易想到,如果只遍历一次你有没有什么好办法?

但是,经我一想哪里需要两次循环。用我大 php 一次循环加个排序不就好了吗。 原数据:

Array
(
    [0] => dddd
    [1] => a
    [2] => eeeee
    [3] => ccc
    [4] => bb
)
最大数:eeeee

渣代码:

<?php

$a = [
    'dddd',
    'a',
    'eeeee',
    'ccc',
    'bb',
];

$arr = [];
foreach ($a as $k => $v) {
    $arr[strlen($v)] = $v;
}

echo '<pre>';
print_r($a);
krsort($arr);
print_r('最大数:' . current($arr));

一直听闻,php 对于数组的处理比其他语言要厉害。难道,果真如此,其他语言,对于这题有啥不同的解法,请赐教!

9485 次点击
所在节点    程序员
96 条回复
kdwycz
2018-03-23 10:54:45 +08:00
LZ 真是一粉顶十黑
ftdejo
2018-03-23 10:56:57 +08:00
```
vector<string> longestWords(vector<string> &dictionary) {
// write your code here
vector<string> ret{""};
for(auto & str: dictionary) {
if(str.size() > ret.back().size()) {
ret = vector<string>{str};
}else if(str.size() == ret.back().size()) {
ret.emplace_back(str);
}
}
return ret;
}
```
贴下自己代码,为什么两次运行时间不一样。。以前都在 leetcode 上刷的。。
snw
2018-03-23 10:57:45 +08:00
不就是一个[]和一个 int 的事吗。
遇到长的♂就把之前[]里的全踢了放新的,int 记录下新长♂度;
遇到一样的♂就追加到[]里;
遇到短的♂直接无视。
ftdejo
2018-03-23 11:01:01 +08:00
@ChristopherWu 这都要开个 hash 做··直接遍历一遍不就行了吗··
sixand
2018-03-23 11:14:21 +08:00
为什么要这样?
???(黑人问号脸)
max([len(item) for item in ['123','54245234523432','fgewrgew','123432143','gfeg']])
ChristopherWu
2018-03-23 11:30:57 +08:00
@ ftdejo 秀逗了。。用数组就可以了,可以不用 hash。
vagranth
2018-03-23 12:30:32 +08:00
当然是遍历一次,难道还要遍历两次?
prolic
2018-03-23 12:37:56 +08:00
从来不考虑时间复杂度,处理耗时长就推给 php 性能问题,php 还真是“最好的语言”
notreami
2018-03-23 12:52:47 +08:00
@gbin 最后那个 base64 去掉。这么明显的两个等号,一眼就知道 base64 了。还需要提醒嘛?
iceheart
2018-03-23 13:04:09 +08:00
var len = 0
var list = []
for ( x in array ){
if x.length > len { list = [] }
if x.length == len { list.pushback(x) }
}
psklf
2018-03-23 13:15:01 +08:00
lz 估计被吓坏
另外推荐 leetcode
vjnjc
2018-03-23 13:36:32 +08:00
7 楼差不多对了,还要注意最大单词可能不止一个
xpresslink
2018-03-23 13:43:29 +08:00
通过测试
http://www.lintcode.com/submission/13728720/

class Solution:
"""
@param: dictionary: an array of strings
@return: an arraylist of strings
"""
def longestWords(self, dictionary):
# write your code here
from itertools import groupby
return list(next(groupby(sorted(dictionary,key=len,reverse=True), key=len))[1])


如果只是找出第一个最长的单词我大 py 有 Hack 的写法

>>> words = ["dog",
"google",
"facebook",
"internationalization",
"blabla"]

>>> max(words, key=len)
'internationalization'
vZexc0m
2018-03-23 15:20:27 +08:00
@solaro 数组不可变,切片可变,我是这样认为的
ichou
2018-03-23 21:17:47 +08:00
@resturlaub 终于看到大 ruby 了 哈哈哈
loadinger
2018-03-24 09:58:35 +08:00
数据结构白学了吗。。。。php 就是这样被搞臭的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX