刚打算入门学习算法,遇到一题发现 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 对于数组的处理比其他语言要厉害。难道,果真如此,其他语言,对于这题有啥不同的解法,请赐教!

9250 次点击
所在节点    程序员
96 条回复
ChristopherWu
2018-03-22 14:50:54 +08:00
qxy
2018-03-22 14:57:23 +08:00
@lizhenda
@nbndco 这种题目,不能调用系统函数的吗。。 还真是不知道
rrfeng
2018-03-22 15:02:48 +08:00
lintcode ?不是 leetcode 吗
nbndco
2018-03-22 15:04:27 +08:00
@qxy
就算可以调用系统函数,你的答案本身还是错的(不看复杂度)。
算法题本质考察的是你对算法的理解,你调用系统函数可以,你确定你的解法是最优的么?
就这个问题而言,你确定排序里面没有遍历么?
按照你的思路还可以写一个没有遍历的解法,只要把算法写一个函数调用一下就变成一行解决一个算法题了。
g00001
2018-03-22 15:11:04 +08:00
@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-03-22 15:16:28 +08:00
python 一次循环就 ok 了吧
wsstest
2018-03-22 15:16:32 +08:00
睡眠排序一步搞定
davinci
2018-03-22 15:16:56 +08:00
@g00001 这个解法是对的
resturlaub
2018-03-22 15:24:43 +08:00
arr.max_by(&:length)
vincenttone
2018-03-22 15:31:58 +08:00
表示是来看热闹的
misaka19000
2018-03-22 15:38:54 +08:00
怎么 V 站最近开贴黑 PHP 的人越来越多了
tommyZZM
2018-03-22 15:42:58 +08:00
araraloren
2018-03-22 15:52:26 +08:00
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-03-22 15:56:31 +08:00
又黑 PHP (
mengyaoss77
2018-03-22 16:04:33 +08:00
搞个链表,
遍历一遍原数组, 遇到相同大小的就加到链表后面, 遇到更大的就重建链表。
最后输出链表,成了! 一次遍历!
qxy
2018-03-22 16:57:10 +08:00
@nbndco 受教了。
qxy
2018-03-22 16:57:51 +08:00
@jmc891205
@misaka19000
@htfy96 真没黑 php。。。我自己就是做 php 的,黑他干嘛。。 我就是萌新,大佬勿喷
carlclone
2018-03-22 17:10:18 +08:00
别来丢人了真的.....
liuhuansir
2018-03-22 17:12:41 +08:00
学习算法最好用 C 语言
solaro
2018-03-22 17:13:18 +08:00
go 的切片和 array 到底他妈的什么区别??看的我一脸懵逼

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

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

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

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

© 2021 V2EX