2018年拼多多牛课网试题-贪心算法

1.六一儿童节---贪心算法

 

思路:本题考查的是贪心算法

可以采用的思路是将学生和巧克力都进行排序,然后进行贪心算法,就是将最小的巧克力给最小的学生,如果巧克力大于等于最小的学生则计算+1,同时将学生的下表+1(类似于遍历);直到所有的学生都有糖果break掉

代码-java

import java.util.Arrays;
import java.util.Scanner;
//贪心算法   最小的给最小的
public class Main{
public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();//从键盘输入学生
    int[]h=new int[n];//学生
    for(int i=0;i<h.length;i++){
        h[i]=sc.nextInt();
    }
    int m=sc.nextInt();//巧克力
    int[]w=new int[m];
    for(int i=0;i<w.length;i++){
        w[i]=sc.nextInt();
    }
    Arrays.sort(h);//学生排序
    Arrays.sort(w);//巧克力排序
    
    int stustart=0;
    int count=0;
    //巧克力给学生
    for(int i=0;i<w.length;i++){
        if(w[i]>=h[stustart]){// 如果最小的巧克力比最小的学生要的大
            count++;// 那就把这个糖果给他,count加1
            stustart++;// 给他后,把最小的学生加一
            if(stustart==n)// 如果最后一个学生都有糖了,就不找了,break掉
            break;
        }
    }
    System.out.println(count);
}
}

 

 

2。最大乘积   两个

题目:

 思路:本题的重点是找到 输入数据中的最大值max1,次大值max2,第三大值max3以及最小值min1,次小值min2如果存在负数的话就是负负得正了

代码:java

import java.util.Arrays;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){ni gu
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();//获取键盘输入
        long[] array=new long[n];
        for(int i=0;i<n;i++){
           array[i] = sc.nextLong();
        }
        getLargestMul(array,n);
    }
    public static void getLargestMul(long[] num,int len){
        long max1=0,max2=0,max3=0,min1=0,min2=0;
        for(int i=0;i<len;i++){
            if(num[i]!=0){
              if(num[i]>max1){
                max3=max2;
                max2=max1;
                max1=num[i];
            }
            else if(num[i]>max2){
                max3=max2;
                max2=num[i];
            }
            else if(num[i]>max3){
                 max3=num[i];
            }
            else if(num[i]<min1){
                min2=min1;
                min1=num[i];
            }
            else if(num[i]>min1 && num[i]<min2){
                min2=num[i];
            }
            }else continue;
        }
        long  max=Math.max(max1*max2*max3,max1*min1*min2);
        System.out.print(max);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值