数组算法

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]);
        }
    }
发布了72 篇原创文章 · 获赞 15 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/pangzaifei/article/details/104308018