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

2018 年 3 月 22 日
 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 对于数组的处理比其他语言要厉害。难道,果真如此,其他语言,对于这题有啥不同的解法,请赐教!

10341 次点击
所在节点    程序员
96 条回复
ChristopherWu
2018 年 3 月 22 日
qxy
2018 年 3 月 22 日
@lizhenda
@nbndco 这种题目,不能调用系统函数的吗。。 还真是不知道
rrfeng
2018 年 3 月 22 日
lintcode ?不是 leetcode 吗
nbndco
2018 年 3 月 22 日
@qxy
就算可以调用系统函数,你的答案本身还是错的(不看复杂度)。
算法题本质考察的是你对算法的理解,你调用系统函数可以,你确定你的解法是最优的么?
就这个问题而言,你确定排序里面没有遍历么?
按照你的思路还可以写一个没有遍历的解法,只要把算法写一个函数调用一下就变成一行解决一个算法题了。
g00001
2018 年 3 月 22 日
@davinci 不排序,返回多个:

longWords = function(s){
var m;
for w in string.lines(s,"\s") {
if( #w > #m[[1]] ) m = {w} ;
elseif( #w == #m[[1]] ) table.push(m,w );
}
return m;
}

var words = longWords("dddd a eeeee ffff ccc bb ccccc");
whoami9894
2018 年 3 月 22 日
python 一次循环就 ok 了吧
wsstest
2018 年 3 月 22 日
睡眠排序一步搞定
davinci
2018 年 3 月 22 日
@g00001 这个解法是对的
resturlaub
2018 年 3 月 22 日
arr.max_by(&:length)
vincenttone
2018 年 3 月 22 日
表示是来看热闹的
misaka19000
2018 年 3 月 22 日
怎么 V 站最近开贴黑 PHP 的人越来越多了
tommyZZM
2018 年 3 月 22 日
araraloren
2018 年 3 月 22 日
PHP stolen many ideas from Perl

my @a = < dddd a eeeee 55555 ccc bb >;
my $max = -1;

say @a.classify({ $max = .chars if .chars > $max; .chars }){$max};

try it online: https://tio.run/#perl6
htfy96
2018 年 3 月 22 日
又黑 PHP (
mengyaoss77
2018 年 3 月 22 日
搞个链表,
遍历一遍原数组, 遇到相同大小的就加到链表后面, 遇到更大的就重建链表。
最后输出链表,成了! 一次遍历!
qxy
2018 年 3 月 22 日
@nbndco 受教了。
qxy
2018 年 3 月 22 日
@jmc891205
@misaka19000
@htfy96 真没黑 php。。。我自己就是做 php 的,黑他干嘛。。 我就是萌新,大佬勿喷
carlclone
2018 年 3 月 22 日
别来丢人了真的.....
liuhuansir
2018 年 3 月 22 日
学习算法最好用 C 语言
solaro
2018 年 3 月 22 日
go 的切片和 array 到底他妈的什么区别??看的我一脸懵逼

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

https://study.congcong.us/t/440404

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

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

© 2021 V2EX