目录
- class Solution {
- public int minimumSum(int[] nums) {
- int minx=Integer.MAX_VALUE;
-
- for(int i=0;i
2;i++) - for(int j=i+1;j
1;j++) - for(int k=j+1;k
- if(nums[j]>nums[i]&&nums[k]
- {
- System.out.println(nums[i]+" "+nums[j]+" "+nums[k]);
- int t=nums[i]+nums[j]+nums[k];
- if(t
- }
- if(minx==Integer.MAX_VALUE) return -1;
- return minx;
- }
- }
2、元素和最小的山型三元组 || - 维护前后最小值 遍历


思路:
自己做出来的!没有看题解!
- 维护每一个nums[i]的前后最小值,然后遍历整个区间,如果该数的前后(pre和beh)满足山峰形式,则更新最小值
- 具体做法是开辟两个数组:pre[i]存nums[i]前的最小值,beh[i]存nums[i]后的最小值
- class Solution {
- public int minimumSum(int[] nums) {
- int n=nums.length;
- int[] pre=new int[100001],beh=new int[100001];
- pre[0]=Integer.MAX_VALUE;
- beh[n-1]=Integer.MAX_VALUE;
-
- for(int i=1;i
1;i++) - if(pre[i-1]>nums[i-1])
- pre[i]=nums[i-1];
- else pre[i]=pre[i-1];
-
- for(int i=n-2;i>0;i--)
- if(beh[i+1]>nums[i+1])
- beh[i]=nums[i+1];
- else beh[i]=beh[i+1];
-
- int minx=Integer.MAX_VALUE;
- for(int i=1;i
1;i++) - if(pre[i]
beh[i]) - {
- int t=pre[i]+nums[i]+beh[i];
- if(t
- }
-
- if(minx==Integer.MAX_VALUE) return -1;
- return minx;
- }
- }
3、合法分组的最少组数 - 思维 + 哈希表

思路:
用哈希表统计每个数字出现的个数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]累加结果,
,一旦分组成功直接返回答案
- class Solution {
- public int minGroupsForValidAssignment(int[] nums) {
- Map
mp=new HashMap<>(); - int k=Integer.MAX_VALUE;
- for(int x:nums) mp.put(x,mp.getOrDefault(x,0)+1);
- for(int x:mp.values())
- k=Math.min(k,x);
-
- int res=0;
- for(;;k--)
- {
- res=0;
- for(int x:mp.values())
- {
- if(x/k < x%k) //如果余数>组数 因为分组之差不能大于1 所以这种情况下即使每组+1也分不完余数 分组失败
- {
- res=0;
- break;
- }
- res+=(x+k)/(k+1); //res+=x/(k+1)向上取整
- }
- if(res>0) return res;
- }
- }
- }
-
相关阅读:
【快速上手系列】内网穿透(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