您好,我这里有三个算法问题想请教一下
1.有一数组[7,5,4,5,1,5,5]随便一个,找出出现频率最多的那个要符合频率数/数组长度>0.5,如果有就把这个数的下标打出来,如果没有返回-1
2.有数组[3,1,-3,5,-4,3],打出正负算一个数,每个数的频率数
3.有序列[5,0,2,-6,4]他的子序列可以有[5,0],[5,0,2][2,-6],[5,0,2,-6,4]但不能是[5,2],[5,-6]
求最大的序列和,例子的最大序列是[5,0,2]=7
求最简单合理的方法.
不知道还有多少分,都给了
1.有一数组[7,5,4,5,1,5,5]随便一个,找出出现频率最多的那个要符合频率数/数组长度>0.5,如果有就把这个数的下标打出来,如果没有返回-1
2.有数组[3,1,-3,5,-4,3],打出正负算一个数,每个数的频率数
3.有序列[5,0,2,-6,4]他的子序列可以有[5,0],[5,0,2][2,-6],[5,0,2,-6,4]但不能是[5,2],[5,-6]
求最大的序列和,例子的最大序列是[5,0,2]=7
求最简单合理的方法.
不知道还有多少分,都给了
前两题import java.util.*;public class IntFreq
{
public static int maxFreq(int... ia)
{
Map<Integer, Integer> integers = new HashMap<Integer,Integer>(); for (int i : ia)
{
Integer freq = integers.get(i);
freq = (freq == null) ? 1 : freq + 1;
integers.put(i, freq);
} int maxFreq = Collections.max(integers.values()); for (Map.Entry<Integer,Integer> e : integers.entrySet())
{
int val = e.getValue();
if ((val == maxFreq) && (val*2 > ia.length)) return e.getKey();
} return -1;
} public static Map<Integer, Integer> frequences(int... ia)
{
Map<Integer, Integer> integers = new LinkedHashMap<Integer,Integer>(); for (int i : ia)
{
Integer freq = integers.get(i);
freq = (freq == null) ? 1 : freq + 1;
integers.put(i, freq);
} Map<Integer,Integer> result = new LinkedHashMap<Integer, Integer>();
for (int i : new LinkedHashSet<Integer>(integers.keySet()))
{
int freq = integers.remove(i);
Integer freq2 = integers.get(-i);
if (freq2 != null)
{
freq += freq2;
integers.put(-i, freq);
}
result.put(i, freq);
} return result;
} public static void main(String[] args)
{
System.out.println(maxFreq(7,5,4,5,1,5,5));
System.out.println(frequences(3,1,-3,5,-4,3));
}
}第一个方法是第一题,第二个方法是第二题
运行结果
5
{3=3, 1=1, -3=3, 5=1, -4=1}
{
public static Map<List<Integer>, Integer> maxSubList(int... ia)
{
int maxSum = Integer.MIN_VALUE;
int maxFrom = 0;
int maxTo = 0;
for (int start = 0; start < ia.length -1; start++)
{
for ( int end = start + 2; end <= ia.length; end++)
{
int[] subList = Arrays.copyOfRange(ia, start, end);
int sum = 0;
for (int i : subList)
{
sum+=i;
}
if (sum > maxSum)
{
maxSum = sum;
maxFrom = start;
maxTo = end;
}
}
} List<Integer> sub = new ArrayList<Integer>(); for (int index = maxFrom; index < maxTo; index++)
{
sub.add(ia[index]);
} Map<List<Integer>, Integer> result = new HashMap<List<Integer>, Integer>();
result.put(sub, maxSum);
return result;
} public static void main(String[] args)
{
System.out.println(maxSubList(5,0,2,-6,4));
}
}结果
{[5, 0, 2]=7}
你要合并,我改下import java.util.*;public class IntFreq
{
public static int maxFreq(int... ia)
{
Map<Integer, Integer> integers = new HashMap<Integer,Integer>(); for (int i : ia)
{
Integer freq = integers.get(i);
freq = (freq == null) ? 1 : freq + 1;
integers.put(i, freq);
} int maxFreq = Collections.max(integers.values()); for (Map.Entry<Integer,Integer> e : integers.entrySet())
{
int val = e.getValue();
if ((val == maxFreq) && (val*2 > ia.length)) return e.getKey();
} return -1;
} public static Map<Integer, Integer> frequences(int... ia)
{
Map<Integer, Integer> integers = new LinkedHashMap<Integer,Integer>(); for (int i : ia)
{
if (i < 0) i = -i;
Integer freq = integers.get(i);
freq = (freq == null) ? 1 : freq + 1;
integers.put(i, freq);
}/* Map<Integer,Integer> result = new LinkedHashMap<Integer, Integer>();
for (int i : new LinkedHashSet<Integer>(integers.keySet()))
{
int freq = integers.remove(i);
Integer freq2 = integers.get(-i);
if (freq2 != null)
{
freq += freq2;
integers.put(-i, freq);
}
result.put(i, freq);
}*/ return integers;
} public static void main(String[] args)
{
System.out.println(maxFreq(7,5,4,5,1,5,5));
System.out.println(frequences(3,1,-3,5,-4,3));
}
}运行结果
5
{3=3, 1=1, 5=1, 4=1}