查看: 1424| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 求大神帮忙讲解一道OA的题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
这是一道IBM的OA,写了半天也没有解出来,恳请哪位大神帮忙讲解一下,感谢感谢!

Screenshot 2022-09-20 121316.png (208.19 KB, 下载次数: 4)

Screenshot 2022-09-20 121316.png

评分

参与人数 1大米 +10 收起 理由
14417335 + 10 给你点个赞!

查看全部评分


上一篇:【求问】时间复杂度分析的疑问
下一篇:扔骰子,扔出来多少拿多少dollar,不满意可以重新扔,最多扔3次,问expected value。
推荐
 楼主| 王坤 2022-9-21 01:28:53 | 只看该作者
全局:
解出来了,感谢各位!!!
回复

使用道具 举报

全局:
就是按2进制位分解,偶数位的1 count1,奇数位的1 count2,到4的余数部分count1(也可以先mod一下4然后用剩下的部分做第一步)。

评分

参与人数 1大米 +1 收起 理由
王坤 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
第三个条件是说 所有的数对4的余数都是一样的
第二个条件说 原数组任何数减去余数后,如果写成二进制,1只会出现在偶数位

所以第一部找见数组里四的共同余数,应该有且只有一个,否则无解
第二步把所有数字都减去这个余数后,表示成二进制,统计下1都用了哪些位(2~16)

希望有帮助

评分

参与人数 1大米 +1 收起 理由
王坤 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
我觉得可以这么想,将每个数看做它本身的二进制形式,这样在1,3,5... 位置上的1就是2的偶次方,然后2,4上的1是奇次方,奇次方可以是两个比他小的偶次方的和,除了0位置的1只能是1。这样应该是分解一个数的最优解。
如果有帮助,求加米~😄

评分

参与人数 2大米 +2 收起 理由
王坤 + 1 给你点个赞!
Jaaack + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
dfthb 2022-9-26 01:39:51 | 只看该作者
全局:
可以当成4进制处理吗? x = an*4^n + ... + a1 * 4 + a0  要求 a0 > 1, 然后 k-1 由前面 an ... a1 非零系数之和组成。
回复

使用道具 举报

🔗
 楼主| 王坤 2022-9-26 02:06:07 | 只看该作者
全局:
dfthb 发表于 2022-9-25 13:39
可以当成4进制处理吗? x = an*4^n + ... + a1 * 4 + a0  要求 a0 > 1, 然后 k-1 由前面 an ... a1 非零系 ...

我是用二进制写的,下面是代码,可以参考一下。

class Solution {
    public static void main(String[] args) {
        int[] input = new int[]{5,1,4,6,10,21,70, 101};
        int size = input.length;
        int[] ans = new int[size];
        for(int i = 0; i < size; i++){
            ans[i] = helper(input[i]);
        }
        for(int n : ans){
            System.out.println(n);
        }
        
}
public static int helper(int num){
    if(num % 4 == 0){
        return -1;
    }
    if(num < 4){
        return 1;
    }
    num /= 4;
    String bin_num = Integer.toBinaryString(num);
    System.out.println("binary: " + bin_num);
    int counter = 0;
    boolean odd = true;
    char[] arr = bin_num.toCharArray();
    for(int i = arr.length - 1; i >= 0; i--){
        char c = arr[i];
        if(odd){
            counter += (c - '0');
        }
        else{
            counter += 2 * (c - '0');
        }
        odd = !odd;
    }
        return counter + 1;
    }
}
回复

使用道具 举报

🔗
lyzh 2023-12-15 14:06:09 | 只看该作者
全局:
除以4,看商和余数:
1.余数为0,return -1 (因为没有小于4的数);
2.余数>0, 商为0,k=1 (数本身<4,分解的是其本身);
3.余数>0,商>0, 且商是偶数:k=2 (4^商 和余数);
4.余数>0,商>0, 且商是基数:k=3 (4^(商-1), 4^(商-1),和余数);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表