数组最小相等和

题目描述

题目

算法思路

题目要求将两个数组中的所有0都将被替换成严格正整数,故最小数组元素和,即将数组中的所有0都变成1。而判断两个数组中所有元素之和能否相等,我们可以将两个数组中所有的0都变成1,此时,如果数组元素和较小的数组,其原本含有0的数量是大于0的,那么该数组一定可以改变原本的0,使其元素和等于另一个数组,故另一个数组的元素和即为最小相等和;而如果此时数组元素和较小的数组,其原本含有0的数量是等于0的(即原本数组中不含有0),那么就无法使两数组元素和相等。而如果将数组中的0变为1后,两个数组的元素和已经相等了,那么该元素和就是最小相等和。

代码实现

 public long minSum(int[] nums1, int[] nums2) {
        // 记录两个数组的元素和
        long sum1=0,sum2=0;
        // 记录两个数组中,0元素的个数
        int count1=0,count2=0;
        // 分别统计两个数组0元素的个数,以及将0元素变为1之后的数组和
       // 最后进行判断
        for(int i:nums1){
            if(i==0) {
                count1++;
                sum1+=1;
            }
            else sum1+=i;
        }
        for(int i:nums2){
            if(i==0) {
                count2++;
                sum2+=1;
            }
            else sum2+=i;
        }
        if(sum1==sum2) return sum1;
        else if(sum1>sum2){
            if(count2>0) return sum1;
            else return -1;
        }
        else {
            if(count1>0) return sum2;
            else return -1;
        }

    }

时间复杂度O(n),空间复杂度O(1)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容