小编Ada*_*zyk的帖子

hashMap 是作为链表数组实现的吗

在阅读相关内容时,HashMap我发现它是作为存储桶数组实现的?现在这些桶总是链表吗?如果是这样,为什么它们被称为桶而不是链表?

java hashmap

5
推荐指数
1
解决办法
4330
查看次数

迁移到Android Studio

我想从Eclipse迁移到Android Studio,但遗憾的是Eclipse崩溃了,所以我无法构建gradle-build文件,所以我重新安装了Eclipse,幸运的是我还有那些,我复制了旧文件,这些文件位于旧工作区(从崩溃前的工作区到新的工作区.

但是,当我现在构建gradle-build文件并在Android Studio中导入它时,我说我的gridlayout_v7丢失了.

你们中的任何人都知道如何解决这个问题吗?

java eclipse android android-studio

5
推荐指数
1
解决办法
200
查看次数

2模式字符串匹配算法

我需要为最长的两个模式前缀/后缀匹配编码算法,其时间复杂度为O(n + m1 + m2),其中n是String的长度,m1,m2分别是pattern1和pattern2的长度.

示例:如果字符串为"OBANTAO"且Pattern1为"BANANA"且Patten2为"SIESTA",则答案为字符串的子字符串"BANTA",其由BANANA的前缀BAN和SIESTA的后缀TA组成.

谷歌的结果是:"Rabin-karp字符串搜索算法","Knuth-morris-pratt算法"和"Boyer-moore字符串搜索算法".

我能够理解以上所有3种算法,但问题在于,它们都基于"单一模式前缀/后缀匹配".我无法为两个模式前缀/后缀匹配扩展它们.

一个示例算法或搜索它的链接对我开发程序非常有帮助.

regex string algorithm suffix-tree prefix-tree

5
推荐指数
1
解决办法
595
查看次数

如何将String数组放入String数组的数组中?

我有4个这样的字符串数组:

String[] array1  = new String{"there",  "there2", "there3", "there4"};
String[] array2  = new String{"here","here2","here3"};
String[] array3  = new String{"hi","hi2"};
String[] array4  = new String{"blah","blah2","blah3"};
Run Code Online (Sandbox Code Playgroud)

我想将这些放入一个数组数组,看起来像这样:

   Array myArray =  [{"there",  "there2", "there3", "there4"},
                     {"here","here2","here3"},{"hi","hi2"},
                     {"blah","blah2","blah3"}];
Run Code Online (Sandbox Code Playgroud)

然后就可以像这样访问它中的元素:

myArray[0][1] would equal "there2"
myArray[1][2] would equal "here3"
Run Code Online (Sandbox Code Playgroud)

希望有道理,我怎么能这样做呢?

我试过像这样制作一个ArrayList然后添加它们但它似乎不起作用

ArrayList<String[]> myArrayList = new ArrayList<String[]>();
myArrayList.add(myArray);
Run Code Online (Sandbox Code Playgroud)

java arrays

5
推荐指数
1
解决办法
637
查看次数

为什么新的Base()不能传递给<?扩展Base>?

这段代码:

public class Base<E> {
    static void main(String[] args) {
        Base<? extends Base> compound = new Base<Base>();
        compound.method(new Base()); 
    }                // ^ error
    void method(E e) { }
}
Run Code Online (Sandbox Code Playgroud)

给出了这样的编译错误:

Error:(4, 17) java: method method in class Base<E> cannot be applied to given types;
  required: capture#1 of ? extends Base
  found: Base
  reason: actual argument Base cannot be converted to capture#1 of ? extends Base by method invocation conversion
Run Code Online (Sandbox Code Playgroud)

从我的理解,E成为? extends Base,延伸的东西Base.那么,为什么new Base() …

java generics

5
推荐指数
1
解决办法
74
查看次数

是否遵循java约定仅为集合提供getter?

我最近遇到了如下代码:

public List<Item> getItems() {
    if (items == null) {
        items = new ArrayList<Item>();
    }
    return this.items;
}
Run Code Online (Sandbox Code Playgroud)

而且至关重要的是,没有特定的方法.

因此,如果您想添加到arrayList,则必须这样做

foo.getItems().add(...)  
Run Code Online (Sandbox Code Playgroud)

而不是

foo.setItems(myArrayList)
Run Code Online (Sandbox Code Playgroud)

我之前没有见过这个成语,我不能说我喜欢它,但是当我使用mapstruct.org(顺便说一句很棒的工具)生成一些映射代码时,mapstruct处理得很好并正确生成使用getter的代码作为一个制定者.

我只是想知道 - 这是一个我不知何故错过的常见习语吗?这对我来说似乎毫无意义,但也许背后有一些智慧,我没有看到?

java

5
推荐指数
2
解决办法
120
查看次数

如何找到整数M的最大奇数分解?

令M为范围内的整数[1; 10亿.

M 的分解是一组唯一的整数,其总和等于M.

如果分解仅包含奇数整数,则分解为奇数.

如果在集合的大小中没有M的其他分解,则M的分解是最大的.

写一个函数:

int[] maxOddDecomposition(int M)
Run Code Online (Sandbox Code Playgroud)

返回一个M的最大奇数分解的数组.数组中的数字应按升序排列.如果M没有任何奇数分解,则数组应为空.如果有多个正确答案,则该函数可以返回其中任何一个.

例如,M = 6有四个分解:

6 = 1 + 2 + 3
  = 1 + 5
  = 2 + 4
  = 6
Run Code Online (Sandbox Code Playgroud)

只是1 + 5奇数分解,因此是最大奇数分解.我们应该将它返回到数组中,以便array[0] = 1array[1] = 5.

预期的最坏情况时间和空间复杂度为O(sqrt(M)).


我尝试过的:

由于时间复杂度必须是sqrt(M),它让我想起了M算法的天真因子分解,其中我们从1迭代到sqrt(M).虽然没有进一步的想法.只有它必须非常快,只有sqrt(M)步.

所以,我做了一些例子.例如,如何找到20的答案?小于20的奇数是多少?1 + 3 + 5 + 7 + ...我们已经有16个.所以,我们可以添加4个,但是4个是偶数个.

所以,让我们用(7 + 4)= 11替换7,我们完成了:1 + 3 + 5 + 11.我注意到的是初始序列始终是floor(sqrt(M))元素,完美.让我们用伪代码编写代码:

int len = floor(sqrt(M));
int result[] …
Run Code Online (Sandbox Code Playgroud)

language-agnostic algorithm

5
推荐指数
2
解决办法
1294
查看次数

为什么我们无法比较不指向同一数组中元素的指针?

我一直在学习C语言,并跟随Yashavant P. Kanetkar的"Let Us C".

指针章节中有一行说我们只能比较指向同一数组中元素的指针,即小于(<)和大于(>)指针.

为什么比较任意指针无效?

c arrays pointers pointer-arithmetic

5
推荐指数
2
解决办法
372
查看次数

更好的游戏启发功能(AI Minimax)

有一个我用java编程的游戏.游戏很简单(参见下图).有4只鸟和1只幼虫.这是一个2人游戏(AI vs Human).

在此输入图像描述

  • 幼虫可以沿对角线向前和对角向后移动
  • 鸟只能向前倾斜
  • 幼虫如果可以到达第1行(围栏)则获胜
  • 如果鸟类没有动作,幼虫也会获胜
  • 鸟不能"吃掉"幼虫.
  • 如果幼虫没有向左移动(根本无法移动),鸟类会获胜

在此输入图像描述

当比赛开始时,幼虫开始,然后一只鸟可以移动(任何一只),然后是幼虫等......


我已经实现了MiniMax(Alpha Beta Pruning),我使用了以下的evaluate()函数(启发式函数).

让我们给板上的每个方块提供以下数字.

在此输入图像描述

因此,我们的评估功能将是

h(n)=幼虫的位置值 - 鸟的位置值1 - 鸟的位置值2 - 鸟的位置值3 - 鸟的位置值4

幼虫将尝试最大化启发式值,而鸟类将尝试最小化它

例:

在此输入图像描述

但是,这是一个简单而天真的启发式方法.它不会以聪明的方式行事.我是AI的初学者,我想知道如何改进这个启发式功能?

什么是好的/知情的启发式?

artificial-intelligence heuristics evaluation-function minimax alpha-beta-pruning

5
推荐指数
0
解决办法
2891
查看次数

过河的最短时间

一只青蛙正试图到达河的另一边.最初位于银行的一侧(位置-1)并且想要到达银行的另一侧(位置N).

青蛙可以跳到1到D之间的任何距离.如果D小于N,青蛙不能直接跳跃.有一些石头可以帮助青蛙跳跃,但是只有在一定时间后水会不断减少,它们才会离开水面.只有当石头没有水时,青蛙才能跳进石头.河流中的石头在阵列A中描述,由N个整数组成.A [K]表示位置K处的石头将离开水的时间.A [K] = - 1表示该位置没有石头.目标是找到青蛙可以到达另一家银行的最早时间.

实施例D = 3,N = 6.
A [0] = 1

A [1] = - 1

A [2] = 0

A [3] = 2

A [4] = 3

A [5] = 5

在时间2,3个石头将缺水,青蛙可以跳3次跳到另一个岸.

有人可以帮我解决这个问题吗?我想不出一个有效的方法来解决这个问题.

algorithm

5
推荐指数
1
解决办法
2694
查看次数