面试准备------笔试中的算法题

这篇博客探讨了如何通过乘2或除2操作最小化步骤,使数组内的正整数变得相同。举例说明了不同情况下的解决策略,如将2,4,8变为相同数只需2步,3,7,14则需要3步。此外,还介绍了一道UVA11054红酒供应问题,提出贪心策略解决村庄间红酒供需平衡的最小运输量问题。" 86225919,8256827,理解Shell脚本:特殊符号与关键字详解,"['shell脚本', '操作系统', 'bash']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 数组中有n个正整数,每次可以选择其中一个数进行乘2或者除以2的操作(对于奇数除以2取其整数部分),求使得数组中的n个数变成相同的数的最小操作次数
    样例:
    2,4,8 输出 2(对2进行乘2操作,对8进行除以2操作)
    3,7,14 输出3 (对7进行除以2操作,对14进行两次除以2操作)
    2,3,7 输出4 (对2进行除以2操作,对3进行除以2操作,对7进行两次除以2操作)
题解:
该题的关键思路有如下几点:1.一个偶数可以通过不断的除以2变化为一个奇数  2.不同的奇数只有可能由较大的奇数变化为较小的奇数 (如 3,7)或者同时变为1(如3,5)

public class LeastOperation {
    
    public int getLeastOperation(int[]nums){
        int[]operationNum=new int[nums.length];
        // 1.将所有的数字变为奇数
        for(int i=0;i<nums.length;i++){
            while(nums[i]%2==0){
                nums[i]=nums[i]/2;
                operationNum[i]=operationNum[i]+1;
            }
        }
        // 2.判断是否为相等的奇数
        boolean isSame=isSame(nums);
        if(isSame){
           // 相等则取中位数 到中位数的距离就是变化的最小次数
            Arrays.sort(operationNum);
            int begin=0;
            int end=operationNum.length-1;
            int totalNum=0;
            while(end>begin){
                total
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值