码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 牛客竞赛每日俩题 - Day6


    目录

    数学等比数列优化

    简单哈希/sort妙用/抵消法


    数学等比数列优化

    猴子分桃__牛客网

    思路:

    把他当成高中数学等比数列题目,一下子就简单起来了!!

                            可以分得桃子数量,                 剩余的桃子数量
    第一个小猴子,( x -1) *1/5                           ( x-1) * 4/5 = 4/5x - 4/5
    第二个小猴子,((x - 1)*4/5-1)*1/5                ( 4/5x - 4/5-1)*4/5 = (4/5)^2* x- (4/5)^2- 4/5
    第三个小猴子,(( 4/5x - 4/5-1)*4/5-1)*1/5    ((4/5)^2* x-(4/5)^2-4/5 -1)*4/5=(4/5)^3* x- (4/5)^3 - (4/5)^2 - 4/5

    于是我们可以推出分给第n个猴子后剩下:

    ((4/5)^n *x - ((4/5)^n +(4/5)^n-1 + ...+(4/5)^1 ) )

    令s = (4/5)^n +(4/5)^n-1 + ...+(4/5)^1,使用等比数列前n项和公式

    得

    s = 4*(1 - 4/5^n)
    所以(4/5)^n * x - 4* (1 - 4/5^n) ---->   4^n / 5^n*(x +4) - 4(剩下)
    (x+4)是5^n的倍数,最小的情况∶(x+4) = 5^n
    即x = 5^n - 4时取剩下最小值4^n-4

     数学优化O(1)复杂度!!

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main()
    6. {
    7. int n;
    8. while(cin >> n) {
    9. if (n == 0) break;
    10. long total = pow(5, n) - 4;
    11. long left = pow(4, n) + n - 4;
    12. cout << total << " " << left << endl;
    13. }
    14. return 0;
    15. }

    简单哈希/sort妙用/抵消法

    数组中出现次数超过一半的数字_牛客题霸_牛客网

    方法一:

    简单哈希;如果哈希表里有则加一,无则加入新表

    1. class Solution {
    2. public:
    3. int MoreThanHalfNum_Solution(vector<int> numbers) {
    4. unordered_map<int,int> map;
    5. int half=numbers.size()/2;
    6. for(auto e:numbers)
    7. {
    8. if(map.count(e)) map[e]++;
    9. else map.insert(make_pair(e,1));
    10. if(map[e]>half) return e;
    11. }
    12. return 0;
    13. }
    14. };

     方法二:

    利用sort性质

    1. class Solution {
    2. public:
    3. int MoreThanHalfNum_Solution(vector<int> numbers) {
    4. sort(numbers.begin(),numbers.end());
    5. return numbers[numbers.size()/2];
    6. }
    7. };

    方法三:

    目标条件:
    目标数据超过数组长度的一半,那么对数组,我们同时去掉两个不同的数字,到最后剩下的一个数就是该数字。
    如果剩下两个,那么这两个也是一样的,就是结果 ,在其基础上把最后剩下的一个数字或者两个回到原来数组中, 将数组遍历一遍统计一下数字出现次数进行最终判断。
    1. class Solution {
    2. public:
    3. int MoreThanHalfNum_Solution(vector<int> numbers) {
    4. if (numbers.size() == 0) {
    5. return 0;
    6. }
    7. //重点写一下
    8. //可以采取不同的数量进行抵消的思路
    9. int number = numbers[0];
    10. int times = 1;
    11. for (int i = 1; i < numbers.size(); i++) {
    12. if (times == 0) { //如果当前times是0,说明之前的不同抵消完了
    13. number = numbers[i];
    14. times = 1;
    15. }
    16. else if (numbers[i] == number) times++;
    17. else times--;
    18. }
    19. //如果输入本身满足条件,则times一定>0, 并且number保存的就是准目标,但是还需要确认
    20. int count = 0;
    21. for (int i = 0; i < numbers.size(); i++) {
    22. if (numbers[i] == number) {
    23. count++;
    24. }
    25. }
    26. return count > numbers.size() / 2 ? number : 0;
    27. }
    28. };

  • 相关阅读:
    输入一段SQL,如何预估运行完该SQL,需要多长时间?需要多少资源?
    Redis八股
    【力扣每日一题01】两数之和
    14、监测数据采集物联网应用开发步骤(10)
    如何快速判定一个排序算法的主循环改用大于逻辑还是小于逻辑,如何判断从表的开头开始遍历还是表的结尾开始便利更优
    Python | Leetcode Python题解之第50题Pow(x,n)
    微信小程序连接阿里云快速入门【物联网】
    部署LVS-DR群集【实验】
    微软 687 亿美元收购游戏巨头动视暴雪,将成为继腾讯、索尼后的第三大游戏公司
    基于卫星高度计海面高度异常资料获取潮汐调和常数方法及应用matlab代码
  • 原文地址:https://blog.csdn.net/weixin_73961973/article/details/127505249
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号