问题一:
一个数组,“支配者”是在数组中出现频率超过一半的整数,
例如[3,4,3,2,-1,3,3,3]数值“3”出现过5次,5除以8大于0.5
所以数值“3”是一个支配者;
而在这个数组中的支配者出现在数组下标[0,2,4,6,7]
写一个函数,在给定的整数数组中找出支配者所在的任意一个数组下标,
如果一个数组中没有支配者返回-1;
解决方案:
public class Test {
public static void main(String[] args) {
int[] array = {3,4,3,2,-1,3,3,3};
List<Integer> list = search(array);
for(Integer i:list){
System.out.print(i+" ");
}
}
public static List<Integer> search(int[] array){
Map<Integer, List<Integer>> map =
new HashMap<Integer, List<Integer>>();
for(int i=0;i<array.length;i++){
//添加出现者和其出现位置
if(map.containsKey(array[i])){
map.get(array[i]).add(i);
}else{
List<Integer> list = new ArrayList<Integer>();
list.add(i);
map.put(array[i], list);
}
}
for(Integer i:map.keySet()){
double percent =
(double)map.get(i).size()/(double)array.length;
if(percent>0.5){
return map.get(i);
}
}
//如果一个数组中没有支配者返回-1
List<Integer> list = new ArrayList<Integer>();
list.add(-1);
return list;
}
}
提示一下:
“支配者”的个数只能是0或1
所以找出数组中出现次数最多的那个判断是不是“支配者”就可以了。
问题二:
找出一个数组中出现次数最多的那个元素
解决方案:
import java.util.*;
import java.util.*;
public class FindMostEle {
private static HashMap<String, Integer> map;
public static HashMap<String, Integer> mostEle(String[] strArray)
{
map = new HashMap<String, Integer>();
String str = "";
int count = 0;
int result = 0;
for(int i=0; i<strArray.length; i++)
str += strArray[i];
for(int i=0; i<strArray.length; i++){
String temp = str.replaceAll(strArray[i], "");
count = (str.length() - temp.length())/strArray[i].length();
if (count > result){
map.clear();
map.put(strArray[i], count);
result = count;
}
else if(count == result)
map.put(strArray[i], count);
}
return map;
}
public static void main(String []args)
{
String[] strArray ={"11","11","2","2","4","5","4"};
HashMap<String, Integer> result = mostEle(strArray);
ArrayList<Integer> c = new ArrayList<Integer>(result.values());
Set<String> s = result.keySet();
System.out.print ("一共"+ result.size() +"個元素.他們分別是:");
System.out.println(s);
System.out.println("出現次數是: "+ c.get(0) +"次.");
}
}
结果是:
一共3個元素.他們分別是:[2, 11, 4]
出現次數是: 2次.
=======================================================
以上是我从网上看到的,把它们放到一起,方便我和大家学习。向乐于帮助别人的牛人们 致敬!!!!