作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在寻找问题的解决方案时遇到了一个非常大的问题。我必须创建一个递归的分而治之算法来计算整数数组中元素的最长非递减子序列的长度。我有以下代码,但它并没有真正起作用,我们将不胜感激!!!
public class LongestSubSequence {
public static int getPartition(int[] a, int p, int r)
{
int mid = ((p+r)/2)-1;
int q=0;
int i = 1;
int j= mid+i;
int k = mid -i;
while (a[mid]<=a[j] && j < r)
{
q = j;
i++;
}
while (a[mid] >=a [k] && k > p)
{
q = k;
i++;
}
return q;
}
public static int getCount (int[]a, int p, int r)
{
int i = p;
int j = p+1;
int count = 0;
while (i<r && j<r)
{
if(a[i]<=a[j])
count++;
i++;
j++;
}
return count;
}
public static int getLongestSubsequence (int[] a, int p, int r) {
int count = 0;
if (p<r)
{
int q = getPartition (a, p, r);
count = getCount(a,p,r);
if (count < getLongestSubsequence(a,p,q))
count = getLongestSubsequence(a, p, q);
else if (count < getLongestSubsequence(a, q+1, p))
{
count = getLongestSubsequence(a, q+1, p);
}
}
return count;
}
public static int LongestSubsequence (int[] a) {
return getLongestSubsequence(a, 0, a.length);
}
public static void main(String[] args) {
int[] a = {1,3,5,9,2, 1, 3};
System.out.println(LongestSubsequence(a));
}
}
最佳答案
这是一个相当大的代码体,要理解所有的 a、r、q 等有点困难。
一般来说,我会创建一个数组(称之为 longestSeq),其中 longestSeq[i] 是迄今为止找到的从原始序列的索引 i 开始的最长非递减序列的长度。例如,如果我有
int[] sequence = new int[] { 3, 5, 1, 2 }
那么算法会产生
longestSeq[0] = 2;
longestSeq[1] = 1;
longestSeq[2] = 2;
longestSeq[3] = 1;
所以您会将 longestSeq 初始化为全 0,然后遍历您的列表并填充这些值。最后取 longestSeq 的最大值即可。
也许开始只是尝试让它迭代工作(没有递归),然后在需要时添加递归。
关于java - 硬件递归分而治之算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746827/
我是一名优秀的程序员,十分优秀!