e02fdb54d7524710a7d664d082bb7811
牵涉到数组的题目,可以先排序,是个妙招啊
/*数组中的元素,大部分都出现了2次,只要1个出现了1次,把这2个找出来*/
// 解法1 : 用map, 主要是containsKey的方法的使用,不过要遍历两次
public static int shuzu(int[]a){
HashMap<Integer,Integer> s= new HashMap();
for(int i:a){
if(s.containsKey(i)){
int value=s.get(i);
s.put(i,value+1);
}
}
for(int i:a){
if(s.get(i)==1){
return i;
};
}
return -1;
}
/*
* 、Arrays.sort 数组排序
2、使用栈进行从小到大入栈,一样的则弹出,不一样则入栈
3、取栈中剩余的元素
*
* */
public static int shuzu2(int[]a){
Arrays.sort(a); //返回的是void,因为是在a数组本身上改的,没有new新数组
Stack<Integer> s=new Stack();
for(int i:a){
if(s.isEmpty()|| i!=s.peek()){
s.push(i);
}else{
s.pop();
}
s.pop();
}
}
数组中一串数,比如 1 2 4 4 4 4 4 4 , 共8个数, 4 出现的次数查过了一半,把4 找出来,没有超过一半的数,返回0(超过一半的只能有1个啊)
还是先排序
public static int half(int[]array){
Arrays.sort(array);
int length=array.length/2;
for(int i=0;i<length;i++){
if(array[i]==array[i+length]){
return array[i];
}
}
return 0;
}