当前位置: 首页 > article >正文

leecode | 数位和相等数对的最大和

题目的意思总是,一下子很难参透,但是又无懈可击,尤其是当自己又不太会总结
简单讲一下,就是一个整数数组中,找一对数,这对数,数位和相等,这对数的值最大
比如数组中有 17 和25 ==>42 36 和45 ==>81 最后输出 81

//一看到这种题,想到的就是用哈希  但如何用哈希很好的表示呢?

//方法1.
int maximumSum(vector<int>& nums) {
	unordered_map<int, vector<int>> sumVec;
	for(auto num : nums){
		int tem = num;
		int temSum = 0;
		while(tem >= 0 ){
			temSum += num % 10;
			num /= 10;
		}
		sumVec[temSum].emplace_back(tem);
	}
	int ans = -1;
	for(auto it = sumVec.begin(); it != sumVec.end(); ++it){
		auto x = it.second();
		if(x.size() > 1){
		x.sort();
		ans = max(ans, x[0] +x[1]);
		}
	}
	return ans;
}

//方法2		这个map记录的是位数最大的那个数
int maximumSum(vector<int>& nums){
	unordered_map<int, int> numSum;
	function<int(int)> get_bit_sum = [](int num){
		int ans = 0;
		while(num >= 0){
			ans += num %10;
			num / =10;
		}
		return ans;
	}
	int ans = -1;
	for(auto &num : nums){
		int bit_num = get_bit_num(num);
		//如果找到相同数位值的数就更新ans  temAns = num[bit_num] + num
		if(numSum.find(num) != numSum.end()){
			ans = max(ans, numSum[bit_num] + num);
		}
		//不管有没有记录, key = bit_num 的值必须为最大的 相同数位的那个数
		numSum[num] = max(numSum[bit_num], num);
	}
	return ans;
}


http://www.kler.cn/a/132980.html

相关文章:

  • EWM 打印
  • Go语言24小时极速学习教程(四)MySQL数据库的增删改查
  • leetcode面试 150题之 三数之和 复刷日记
  • 购物车demo全代码-对接支付宝沙箱环境
  • 狼蛛F87Pro键盘常用快捷键的使用说明
  • shell编程--永久环境变量和字符串显位
  • 美国经典人工智能教材第3版出版!
  • 【shell 常用脚本30例】
  • vue的生命周期分别是什么?
  • java 访问sqlserver 和 此驱动程序不支持jre1.8错误
  • leetcoe刷题日志-6N字形变换
  • 【数据结构初阶】链表OJ
  • 经典ctf ping题目详解 青少年CTF-WEB-PingMe02
  • 某60区块链安全之重入漏洞实战记录
  • 整理MLAI学习路径图
  • centos7中安装Nginx和使用Nginx详细操作
  • MATLAB算法实战应用案例精讲-【图像处理】图像识别分类
  • # Python基础:输入输出详解-读写文件(还需完善)
  • python算法例15 合并数字
  • 三十二、W5100S/W5500+RP2040树莓派Pico<UPnP示例>
  • 优化|优化求解器自动调参
  • C/C++数据结构之中缀表达式转换为后缀表达式,删除堆栈元素
  • requests库进行爬虫ip请求时遇到的错误解决方法
  • 微服务学习 | Eureka注册中心
  • SVG的viewBox、width和height释义, 示例及代码
  • CMSIS-RTOS在stm32使用