当前位置:网站首页>2020-11-07:已知一个正整数数组,两个数相加等于N并且一定存在,如何找到两个数相乘最小的两个数?
2020-11-07:已知一个正整数数组,两个数相加等于N并且一定存在,如何找到两个数相乘最小的两个数?
2020-11-07 23:08:00 【福大大架构师每日一题】
福哥答案2020-11-07:
1.哈希法。 2.排序+双指针夹逼。
golang代码如下:
package main
import (
"fmt"
"sort"
)
const INT_MAX = int(^uint(0) >> 1)
func main() {
nums := []int{2, 1, 3, 4, 5, 6, 9, 8, 7}
fmt.Println(twoSumMultiplication1(nums, 12), "哈希法")
fmt.Println(twoSumMultiplication2(nums, 12), "排序+双指针夹逼")
}
//哈希法
func twoSumMultiplication1(nums []int, target int) int {
map0 := make(map[int]struct{})
min := INT_MAX
for i := 0; i < len(nums); i++ {
complement := target - nums[i] //差值 = 目标值-元素值
if _, ok := map0[complement]; ok { //如果字典里有差值,说明已经找到了
//确保complement是较小的那个值
if complement > nums[i] {
complement, nums[i] = nums[i], complement
}
//谁小保存谁
if complement < min {
min = complement
//如果最小值是1,就不用循环了。
if min == 1 {
break
}
}
} else {
//如果字典里没有差值,缓存数组的当前值
map0[nums[i]] = struct{}{}
}
}
return min
}
//排序+双指针夹逼
func twoSumMultiplication2(nums []int, target int) int {
//排序
sort.Slice(nums, func(i, j int) bool {
return nums[i] < nums[j]
})
sumtemp := 0
min := INT_MAX
for i, j := 0, len(nums)-1; i < j; {
sumtemp = nums[i] + nums[j]
if target == sumtemp {
if min > nums[i] {
min = nums[i]
if min == 1 {
break
}
}
i++
} else if target > sumtemp {
i++
} else {
j--
}
}
return min
}
执行结果如下: 
版权声明
本文为[福大大架构师每日一题]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4553401/blog/4707758
边栏推荐
- ROS learning: remote start ROS node
- Getting started with go wire dependency injection
- go wire 依赖注入入门
- 构造请求日志分析系统
- Judging whether paths intersect or not by leetcode
- LadonGo开源全平台渗透扫描器框架
- See once to understand, graphic single chain table inversion
- A compilation bug brought by vs2015 Update1 update [existing solutions]
- 14000 word distributed transaction principle analysis, master all of them, are you afraid of being asked in the interview?
- [solution] distributed timing task solution
猜你喜欢

More than 50 object detection datasets from different industries

Lay UI left tree Dtree right list table

Insight -- the application of sanet in arbitrary style transfer

构造请求日志分析系统

洞察——风格注意力网络(SANet)在任意风格迁移中的应用

状态压缩:对动态规划进行降维打击

Insight -- the application of sanet in arbitrary style transfer

Everything is 2020, LINQ query you are still using expression tree

Annual salary of 900000 programmers is not as good as 3800 civil servants a month? How to choose between stability and high income?

android基础-RadioButton(单选按钮)
随机推荐
Everything is 2020, LINQ query you are still using expression tree
CPP (2) creating CPP project
What do you think of the most controversial programming ideas?
16.文件传输协议、vsftpd服务
什么都2020了,LINQ查询你还在用表达式树
C language I blog assignment 03
Analysis of kubernetes service types: from concept to practice
ROS learning: remote start ROS node
Web安全(二)---跨域资源共享
构造请求日志分析系统
Adobe Lightroom / LR 2021 software installation package (with installation tutorial)
Get tree menu list
云计算之路-出海记:整一台 aws 免费云服务器
How to think in the way of computer
Wechat applet request reported 400 error @ requestbody failed to receive
The instanceof operator in ecmascript7 specification
计组-总线通信控制之异步串行通信的数据传输
Android 9.0/P WebView 多进程使用的问题
Summary of the resumption of a 618 promotion project
Cpp(三) 什么是CMake