作为函数式编程的练习,我决定浏览一下我的一个项目,并将包含 for 循环的函数替换为 的Array.prototype高阶函数,例如map和reduce。
我的项目中的一个函数对二维数组中的列进行平均。它需要一个参数,samples它是一个大小为 2d 的数组[n][LOOKBACK]:
[
[0.6, 4.0, -0.5],
[1.0, -0.5, -0.8],
...
]
Run Code Online (Sandbox Code Playgroud)
[
[0.6, 4.0, -0.5],
[1.0, -0.5, -0.8],
...
]
Run Code Online (Sandbox Code Playgroud)
输出应该是一个大小的数组LOOKBACK,其元素是每列的平均值:
[0.8, 1.75, -0.65]
Run Code Online (Sandbox Code Playgroud)
我花了一些时间试图找出解决方案,但我似乎无法想出一个。
使用 Javascript 的内置数组函数可以实现这一点吗?
从基里尔那里得到了一个优雅的解决方案。如果其他人有一个好的解决方案,我很乐意看到更多。
我似乎无法找到适当的练习方法.练习要求创建一个方法,如果字符串可以通过删除一个字符而成为回文,则返回true.我有一个解决方案,但无法测试大型(100,000个字符)字符串,因为它超过了1秒的时间限制.有人能指出我正确的方向吗?
我意识到我的方法是蛮力的,我相信有更好的解决方法.我假设我的问题在于迭代.
public class Main {
public static boolean makePalindrome(String mjono) {
StringBuilder sb = new StringBuilder(mjono);
for (int i = 0; i < mjono.length(); i++) {
sb.deleteCharAt(i);
if(isPalindrome(sb.toString())){
return true;
} else {
sb.insert(i, mjono.charAt(i));
}
}
return false;
}
private static boolean isPalindrome(String string) {
return string.equals(new StringBuilder(string).reverse().toString());
}
public static void main(String[] args) {
System.out.println(makePalindrome("ABCBXA"));
System.out.println(makePalindrome("ABCBAX"));
System.out.println(makePalindrome("ABCXBA"));
System.out.println(makePalindrome("ABCDE"));
System.out.println(makePalindrome("BAAAAC"));
}
}
Run Code Online (Sandbox Code Playgroud)
这些是它失败的测试:
@Test(timeout=1000)
public void suuri2() {
int n = 100000;
char[] t = new char[n];
for …Run Code Online (Sandbox Code Playgroud)