每日一题day15

俩到经典题目

一.输入查找二进制中1的个数

题目描述:

解题分析

代码演示

二.配对手套

题目描述:

解题分析

代码演示



一.输入查找二进制中1的个数

题目描述:

https://www.nowcoder.com/practice/1b46eb4cf3fa49b9965ac3c2c1caf5ad?tpId=37&&tqId=21285&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking

 

解题分析

 

代码演示

import java.util.Scanner;
public class day15 {
//    public static void main(String[] args) {
//        //计算二进制中1的个数
//            //计算二进制中1的个数
//            Scanner scanner = new Scanner(System.in);
//            while (scanner.hasNextInt()) {
//                int n = scanner.nextInt();
//                int count = 0;
//                for (int i = 0; i < 32; i++) {
//                    if (((n >> i) & 1) == 1) {
//                        count++;
//                    }
//                }
//                System.out.println(count);
//            }
//        }

}

 

二.配对手套

题目描述:

https://www.nowcoder.com/practice/365d5722fff640a0b6684391153e58d8?tpId=49&&tqId=29337&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking

 

解题分析

 

1.想要取到每一种颜色,分别要是每个手所有颜色的和-每个手颜色最少的手套数量,这样从另外一个手任意取一只(另一种手套对应颜色不为0),都可以取到对应颜色

2.计算左手和右手方案最小值为计算的和

3.如果存在一只手,颜色为0,即当另一只手再也无法取到该颜色,这种方案一定不可行,用sum记录另一只没有对应颜色手套,累加到计算的和中

1,3操作是独立的,即颜色种类为0时执行1,颜色种类不为0时执行3

核心公式: sum+min(letSum-leftMin+1,rightSum-right+1)+1;

 

代码演示

import java.util.*;
public class Gloves {
    public int findMinimum(int n, int[] left, int[] right) {
    // write code here
    int leftSum=0;
    int rightSum=0;
     int leftMin=Integer.MAX_VALUE;
    int rightMin=Integer.MAX_VALUE;
    int sum=0;//当手套为0时,另一只手套的数量
    for (int i = 0; i <n ; i++) {
        if (left[i] * right[i] == 0) {
            sum = left[i] + right[i] + sum;
        } else {
            leftSum += left[i];
            if (leftMin > left[i]) {
                leftMin = left[i];
            }
            rightSum += right[i];
            if (rightMin > right[i]) {
                rightMin = right[i];
            }
        }
    }
    return sum+Math.min(leftSum-leftMin+1,rightSum-rightMin+1)+1;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值