当前位置:网站首页>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
边栏推荐
- 学习Scala IF…ELSE 语句
- Lay UI left tree Dtree right list table
- static+代码块+多态+异常
- Everything is 2020, LINQ query you are still using expression tree
- Problems of Android 9.0/p WebView multi process usage
- CPP (4) boost installation and basic use for Mac
- Jingtao project day09
- These core technology of object-oriented, after you master it, you can have a good interview
- 14000 word distributed transaction principle analysis, master all of them, are you afraid of being asked in the interview?
- Sentry installation
猜你喜欢

【解决方案】分布式定时任务解决方案

On the stock trading of leetcode

WPF personal summary on drawing

Android 9.0/P WebView 多进程使用的问题

Design pattern of facade and mediator

Jingtao project day09

Problems of Android 9.0/p WebView multi process usage

工作1-3年的程序员,应该具备怎么样的技术能力?该如何提升?

The instanceof operator in ecmascript7 specification

The software in your host has terminated an established connection. resolvent
随机推荐
Judging whether paths intersect or not by leetcode
Cryptography - Shangsi Valley
CPP (4) boost installation and basic use for Mac
The road of cloud computing: a free AWS cloud server
Web安全(四)---XSS攻击
ECMAScript7规范中的instanceof操作符
android基础-RadioButton(单选按钮)
What details does C + + improve on the basis of C
【原创】ARM平台内存和cache对xenomai实时性的影响
微服务的出现和意义的探索
16. File transfer protocol, vsftpd service
Git code submission operation, and git push prompt failed to push some refs'xxx '
These core technology of object-oriented, after you master it, you can have a good interview
[C + + learning notes] how about the simple use of the C + + standard library STD:: thread?
Sentry 安装
Qt混合Python开发技术:Python介绍、混合过程和Demo
awk实现类sql的join操作
Go sending pin and email
Lay UI left tree Dtree right list table
Web Security (3) -- CSRF attack