問題:找到具有重復元素的傳染子陣列的最大長度。
例如:
[1 2 2 2 3 3 5 1 8]- 答案是 3,因為 2 重復 3 次是最大重復次數。
[1 2]- 答案是 1
[1 2 2 3 3]- 答案是 2
但是遞回函式應該只有 list 作為引數。int findMaxContagiousRepeatedLength(List<Integer> list)
我試過的:
class Answer
{
public static int findMaxContagiousRepeatedLength(List<Integer> nums, int currentCount, int latestNumber)
{
if (nums.isEmpty())
return 0;
if (nums.get(0) == latestNumber) {
return Math.max(currentCount 1, findMaxContagiousRepeatedLength(nums.subList(1, nums.size()), currentCount 1, nums.get(0)));
} else {
return findMaxContagiousRepeatedLength(nums.subList(1, nums.size()), 1, nums.get(0));
}
}
public static void main(String[] args)
{
Integer[] nums = { 1,2,1,1,1,1,1,2,3,2,3,1,2,2};
System.out.println("Max length: "
findMaxContagiousRepeatedLength(Arrays.asList(nums), 0, nums.length == 0 ? -1 : nums[0]));
}
}
以上確實有效,但不符合引數限制的要求。請幫我弄清楚是否有可能有一個解決方案,其中遞回函式只有串列作為引數。
uj5u.com熱心網友回復:
最佳解決方案
使用你的功能
public static int findMaxContagiousRepeatedLength(List<Integer> nums, int currentCount, int latestNumber)
{
if (nums.isEmpty())
return 0;
if (nums.get(0) == latestNumber) {
return Math.max(currentCount 1, findMaxContagiousRepeatedLength(nums.subList(1, nums.size()), currentCount 1, nums.get(0)));
} else {
return findMaxContagiousRepeatedLength(nums.subList(1, nums.size()), 1, nums.get(0));
}
}
并制作第二個函式,它使用默認引數呼叫您的函式
public static int findMaxContagiousRepeatedLength(List<Integer> nums)
{
return findMaxContagiousRepeatedLength(Arrays.asList(nums), 0, nums.length == 0 ? -1 : nums[0]);
}
現在您可以呼叫第二個函式,該函式使用默認引數呼叫第一個函式!
uj5u.com熱心網友回復:
首先,這個問題最好通過瀏覽串列來解決。但是如果你必須使用遞回List<Integer>作為唯一的引數,你可以使用下面的:
public static int findMaxContiguousRepeatedLength(List<Integer> nums) {
if (nums.isEmpty()) {
return 0;
}
Iterator<Integer> it = nums.iterator();
Integer start = it.next();
int len = 1, pos = 1;
while (it.hasNext()) {
Integer curr = it.next();
if (curr == start) {
pos ;
len ;
} else {
break;
}
}
return Math.max(len, findMaxContiguousRepeatedLength(nums.subList(pos,nums.size())));
}
uj5u.com熱心網友回復:
如果您被允許(臨時)修改串列,則以下方法也可以使用:
public static int findMaxContiguousRepeatedLength(List<Integer> nums) {
if (nums.isEmpty()) {
return 0;
}
// carve out repeated chunk from back
Integer back = nums.remove(nums.size() - 1);
int repeats = 1;
while(!nums.isEmpty() && nums.get(nums.size() - 1) == back) {
nums.remove(nums.size() - 1);
repeats ;
}
int res = Math.max(repeats, findMaxContiguousRepeatedLength(List<Integer> nums));
while(repeats) { // restore
repeats--;
nums.add(back);
}
return res;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461002.html
