我正在尝试编写一个接受数组的方法,并找到彼此相邻的任何相等元素,并返回最大数量的出现次数。例如,int值为{1,2,3,4,4,5,5}的数组将返回值3.具有{1,1,1,2,2,3,3,3,3,5,6,7}
的数组将返回值4。我尝试了几种不同的方法,但我很挣扎。任何帮助,将不胜感激。谢谢。继承了我到目前为止的代码 -
public class EqualElements
{
public static void consecutiveEqualElements(int [] elements)
{
int occurances = 0;
int temp = 0;
int count = 0;
for (int index = 0; index < elements.length; index++)
{
if(elements[index] == elements[temp])
{
count++;
temp++;
index--;
}
else
{
}
}
System.out.println(count);
}
public static void main(String[] args)
{
int [] numbers = {1,2,2,3,4,5,6,7};
consecutiveEqualElements(numbers);
}
}
答案 0 :(得分:1)
这是查看连续数字的数组的更好方法。这适用于未排序和排序的数组。
public static int consecutiveEqualElements(int [] elements) {
int currentNum = elements[0];
int currentConsecutive = 1;
int maxConsecutive = 1;
for (int i = 1; i < elements.length; i++) {
if (elements[i] == currentNum) {
currentConsecutive++;
maxConsecutive = Math.max(maxConsecutive, currentConsecutive);
} else {
currentNum = elements[i];
currentConsecutive = 1;
}
}
return maxConsecutive;
}
答案 1 :(得分:0)
最简单的方法是使用hashmap:
Map map = new HashMap();
现在遍历数组并将每个整数与其计数放在一起。
map.put(yourIntValue, map.get(1) + 1); // if it is already stored with a value.
初始条件:
map.put(yourIntValue,0);
然后再次迭代并找到最大值。
答案 2 :(得分:0)
你已经在遍历数组了 - 这很好。当你这样做时,你会对两个数字感兴趣:
我们为这些变量创建了两个变量:maxCount
和count
。在循环期间,每当我们遇到两个相等的连续元素时,我们递增count
。为了确保maxCount
始终是最新的,我们将其设置为目前为止最长的最大值和当前长度。当下一个元素与前一个元素不同时,我们将count
重置为1,因为这是下一次运行的开始。
public static void consecutiveEqualElements(int [] elements) {
int count = 1;
int maxCount = 1;
for (int index = 1; index < elements.length; index++) {
if (elements[index] == elements[index - 1]) {
count++;
maxCount = Math.max(maxCount, count);
} else {
count = 1;
}
}
System.out.println(maxCount);
}
注意:此方法假定elements
不是null
或为空。如果有必要,你可以单独处理这些案件。
答案 3 :(得分:0)
我的解决方案如下:
public class EqualElements {
public static void consecutiveEqualElements(int[] elements) {
// Saves the maximal number of consecutive number with the
// same numeric value
int occurances = 0;
// Counts how many numbers with the same value stands right
// behind each other
int count = 1;
// Run from the second index because of the in the body following
// if-clause
for (int index = 1; index < elements.length; index++) {
// In case the current and the previous element
// have the same numeric value
if (elements[index] == elements[index - 1]) {
// Increase the count (which is initialised with 1)
// And save the maximal number of consecutive numbers
// with the same value in occurances
count++;
occurances = Math.max(occurances, count);
} else {
// If the two numbers differ, reset the counter
count = 1;
}
}
System.out.println(occurances);
}
public static void main(String[] args) {
int[] numbers = { 1, 2, 2, 2, 3, 4, 5, 2, 6, 7 };
consecutiveEqualElements(numbers);
}
}
我的示例返回正确的解决方案3.它不计算最后2个,因为它不连续。
答案 4 :(得分:-1)
在遍历数组时,将每个元素与前一个元素进行比较。如果两个元素相等,则增加您看到的连续相等值的数量。如果它们不相等,请检查您是否找到了新的最大值,然后将该计数器重置为0.
public static int consecutiveEqualElements(int[] elements) {
int max = 0;
int consecutive = 1;
for (int i = 1; i < elements.length; i++) {
if (elements[i] == elements[i-1]) {
consecutive++;
} else {
if (consecutive > max) {
max = consecutive;
}
consecutive = 1;
}
}
if (consecutive > max) {
return consecutive;
} else {
return max;
}
}
请注意,该方法返回一个值而不是将其打印出来。这使得该方法更加灵活,因为您可能并不总是希望它打印到标准输出。