1.给定一个数组,除了某个元素只出现一次,其他都出现两次,找出这个元素 。输入: [4,1,2,1,2] 输出: 4
public static int handle(int[] nums){
Map<Integer,Integer> map=new HashMap<Integer, Integer>();
for(Integer i:nums){//map的key是数组中的值,value是次数
Integer count = map.get(i);
count= count==null?1:++count;
map.put(i,count);
}
for(Integer i:map.keySet()){
Integer count = map.get(i);
if(count==1) return i;
}
return -1;
}
2.合并两个数组nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6]
public static void handle(int[] nums1,int m,int[] nums2,int n){
System.arraycopy(nums2,0,nums1,m,n);
Arrays.sort(nums1);
}
public static void main(String[] args){
int[] nums1=new int[]{1,2,3,0,0,0};
int[] nums2=new int[]{2,5,6};
handle(nums1,3,nums2,3);
}
3.寻找两个有序数组的中位数
public static float handle(int[] nums1,int[] nums2){
int newLength=nums1.length+nums2.length;
int[] needNums=Arrays.copyOf(nums1,newLength);
System.arraycopy(nums2,0,needNums,nums1.length,nums2.length);
Arrays.sort(needNums);
if(needNums.length/2>0&&needNums.length%2==0){
//偶数个
return (float) ((needNums[needNums.length/2]+needNums[needNums.length/2-1])/2.0);
}else{
return (float) (needNums[needNums.length/2]);
}
}