public static int getMostCommonElement(int[] array) {
Arrays.sort(array);
int frequency = 1;
int biggestFrequency = 1;
int mostCommonElement = 0;
for(int i=0; i<array.length-1; i++) {
frequency = (array[i]==array[i+1]) ? frequency+1 : 1;
if(frequency>biggestFrequency) {
biggestFrequency = frequency;
mostCommonElement = array[i];
}
}
return mostCommonElement;
}
Это - идиома, я всегда раньше получал измененную копию строки, не изменяя оригинал:
(my $newstring = $oldstring) =~ s/foo/bar/g;
В жемчуге 5.14.0 или позже, можно использовать новое /r
неразрушающий модификатор замены:
my $newstring = $oldstring =~ s/foo/bar/gr;
<час> Примечание: вышеупомянутые решения работают без g
также. Они также работают с любыми другими модификаторами.
Оператор:
(my $newstring = $oldstring) =~ s/foo/bar/g;
, Который эквивалентен:
my $newstring = $oldstring;
$newstring =~ s/foo/bar/g;
, С другой стороны, с Perl 5.13.2 можно использовать /r
, чтобы сделать не разрушительную замену:
use 5.013;
#...
my $newstring = $oldstring =~ s/foo/bar/gr;
Под use strict
, скажите:
(my $new = $original) =~ s/foo/bar/;
вместо этого.
Решение остроты более полезно как шибболет, чем хороший код; хорошие кодеры Perl будут знать это и понимать его, но это намного менее прозрачно и читаемо, чем двустишие копировать-и-изменять с двумя строками, с которого Вы запускаете.
, Другими словами, хороший способ сделать это - способ, которым Вы уже выполнение его. Ненужная краткость за счет удобочитаемости не является победой.
Если Вы запишете Perl с use strict;
, то Вы найдете, что один синтаксис строки не допустим, даже когда объявлено.
С:
my ($newstring = $oldstring) =~ s/foo/bar/;
Вы добираетесь:
Can't declare scalar assignment in "my" at script.pl line 7, near ") =~"
Execution of script.pl aborted due to compilation errors.
Вместо этого синтаксис, который Вы использовали, в то время как строка дольше, синтаксически корректный способ сделать это с use strict;
. Для меня, с помощью use strict;
просто привычка теперь. Я делаю это автоматически. Все должны.
#!/usr/bin/env perl -wT
use strict;
my $oldstring = "foo one foo two foo three";
my $newstring = $oldstring;
$newstring =~ s/foo/bar/g;
print "$oldstring","\n";
print "$newstring","\n";