算法题 |
算法刷题专栏 | 面试必备算法 | 面试高频算法
越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
作者简介:硕风和炜,CSDN-Java领域新星创作者,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享
恭喜你发现一枚宝藏博主,赶快收入囊中吧
人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?
算法题 |
给你一个下标从 0 开始的数组 nums ,数组中的元素都是 正 整数。请你选出两个下标 i 和 j(i != j),且 nums[i] 的数位和 与 nums[j] 的数位和相等。
请你找出所有满足条件的下标 i 和 j ,找出并返回 nums[i] + nums[j] 可以得到的 最大值 。
示例 1:
输入:nums = [18,43,36,13,7]
输出:54
解释:满足条件的数对 (i, j) 为:
输入:nums = [10,12,19,14]
输出:-1
解释:不存在满足条件的数对,返回 -1 。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109
class Solution {
public int maximumSum(int[] nums) {
HashMap<Integer,ArrayList<Integer>> map=new HashMap<>();
for(int v:nums){
int res=sumDigit(v);
if(!map.containsKey(res)){
ArrayList<Integer> ans=new ArrayList<>();
ans.add(v);
map.put(res,ans);
}else{
map.get(res).add(v);
}
}
int max=-1;
for(Map.Entry<Integer,ArrayList<Integer>> entry:map.entrySet()){
int key=entry.getKey();
ArrayList<Integer> value=entry.getValue();
if(value.size()<=1) continue;
Collections.sort(value);
max=Math.max(max,value.get(value.size()-1)+value.get(value.size()-2));
}
return max;
}
public int sumDigit(int num){
int sum=0;
while(num!=0){
sum+=num%10;
num/=10;
}
return sum;
}
}
class Solution {
public int maximumSum(int[] nums) {
int n=nums.length;
Map<Integer,Integer> map=new HashMap<>();
int ans=-1;
for(int i=0;i<n;i++){
int t=nums[i];
int sum=0;
while(t!=0){
sum+=t % 10;
t/=10;
}
if(map.containsKey(sum)){
int y=map.get(sum);
ans=Math.max(ans,y+nums[i]);
if(y<nums[i]){
map.put(sum,nums[i]);
}
}else{
map.put(sum,nums[i]);
}
}
return ans;
}
}
最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |