码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Leetcode周赛368补题(3 / 3)


    目录

    1、元素和最小的山型三元组 | - 三层for暴力循环

    2、元素和最小的山型三元组 || - 维护前后最小值 遍历

    3、合法分组的最少组数 - 思维 + 哈希表


    1、元素和最小的山型三元组 | - 三层for暴力循环

    100106. 元素和最小的山形三元组 I

    1. class Solution {
    2. public int minimumSum(int[] nums) {
    3. int minx=Integer.MAX_VALUE;
    4. for(int i=0;i2;i++)
    5. for(int j=i+1;j1;j++)
    6. for(int k=j+1;k
    7. if(nums[j]>nums[i]&&nums[k]
    8. {
    9. System.out.println(nums[i]+" "+nums[j]+" "+nums[k]);
    10. int t=nums[i]+nums[j]+nums[k];
    11. if(t
    12. }
    13. if(minx==Integer.MAX_VALUE) return -1;
    14. return minx;
    15. }
    16. }

    2、元素和最小的山型三元组 || - 维护前后最小值 遍历

    100114. 元素和最小的山形三元组 II

    思路:

    自己做出来的!没有看题解!

    • 维护每一个nums[i]的前后最小值,然后遍历整个区间,如果该数的前后(pre和beh)满足山峰形式,则更新最小值
    • 具体做法是开辟两个数组:pre[i]存nums[i]前的最小值,beh[i]存nums[i]后的最小值
    1. class Solution {
    2. public int minimumSum(int[] nums) {
    3. int n=nums.length;
    4. int[] pre=new int[100001],beh=new int[100001];
    5. pre[0]=Integer.MAX_VALUE;
    6. beh[n-1]=Integer.MAX_VALUE;
    7. for(int i=1;i1;i++)
    8. if(pre[i-1]>nums[i-1])
    9. pre[i]=nums[i-1];
    10. else pre[i]=pre[i-1];
    11. for(int i=n-2;i>0;i--)
    12. if(beh[i+1]>nums[i+1])
    13. beh[i]=nums[i+1];
    14. else beh[i]=beh[i+1];
    15. int minx=Integer.MAX_VALUE;
    16. for(int i=1;i1;i++)
    17. if(pre[i]beh[i])
    18. {
    19. int t=pre[i]+nums[i]+beh[i];
    20. if(t
    21. }
    22. if(minx==Integer.MAX_VALUE) return -1;
    23. return minx;
    24. }
    25. }

     

    3、合法分组的最少组数 - 思维 + 哈希表

    100097. 合法分组的最少组数

    思路:

    用哈希表统计每个数字出现的个数mp[x]

    设组内个数为k

    要想分组最少,则k需要越大,而k最大不能超过最小出现个数

    因此我们可以遍历整个哈希表找出最小出现次数k

    然后倒着枚举k,查找最合适的组内个数

    假设mp[x]=34,假如k=10,则34=10+10+10+4,如果k=11,则34=11+11+11+1就无法合理分配,也就是说,如果分组数<余数【mp[x]÷k < mp[x]%k】,因为分组内个数之差不能超过1,所以这种情况下即使每组个数+1,也分不完余数

    分组越小,组内个数越大,因此如果能合理分组,尽量让组内个数大,也就是k+1

    所以遍历mp[x]累加结果,res=\left \lceil \frac{mp[x]}{k+1} \right \rceil,一旦分组成功直接返回答案

    1. class Solution {
    2. public int minGroupsForValidAssignment(int[] nums) {
    3. Map mp=new HashMap<>();
    4. int k=Integer.MAX_VALUE;
    5. for(int x:nums) mp.put(x,mp.getOrDefault(x,0)+1);
    6. for(int x:mp.values())
    7. k=Math.min(k,x);
    8. int res=0;
    9. for(;;k--)
    10. {
    11. res=0;
    12. for(int x:mp.values())
    13. {
    14. if(x/k < x%k) //如果余数>组数 因为分组之差不能大于1 所以这种情况下即使每组+1也分不完余数 分组失败
    15. {
    16. res=0;
    17. break;
    18. }
    19. res+=(x+k)/(k+1); //res+=x/(k+1)向上取整
    20. }
    21. if(res>0) return res;
    22. }
    23. }
    24. }

     

  • 相关阅读:
    【快速上手系列】内网穿透(natapp)的快速上手和简单使用教程
    Axios在vue项目中的封装
    HTTP协议之Expect爬坑
    C# 中的Async 和 Await 的用法详解
    蚂蚁二面,面试官问我零拷贝的实现原理,当场懵了…
    System V信号量
    AD7321代码SPI接口模数转换连接DAC0832输出verilog
    代码随想录算法训练营第四十四天| 01背包理论基础1、01背包理论基础2、LeetCode 416 分割等和子集
    winform窗体控件太多显示不过来,怎么实现滚动条
    契约测试(中):利用PACT做契约测试
  • 原文地址:https://blog.csdn.net/weixin_61639349/article/details/133972056
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号