Day.4 Two Pointer

Leetcode #167 Two Sum II
题目跟上一篇的Two Sum是一样的,差别在array是经排序的。

Two Pointer是一种演算法技巧,大家来体验一下它的巧妙之处。

ex: array: [2,7,11,15] target: 18

先建立两个指标,一个放在前面(head),一个放在後面(tail)。
https://ithelp.ithome.com.tw/upload/images/20210911/20129767VO0QxnX5MW.png
2+15 = 17,17比18小
我们把head的index +1,因为这是经过排序的,所以head的下一个一定比较大
https://ithelp.ithome.com.tw/upload/images/20210911/20129767i968x44fVw.png
7 + 15 = 21,21比18大
因为加总比目标数大,所以把tail--,理由同上tail-1的值一定比目前的小,
https://ithelp.ithome.com.tw/upload/images/20210911/20129767TMbOvoSoO8.png
7+11 = 18 找到了

完整程序:

func twoSum(arr []int, target int) []int {
	headIndex := 0
	tailIndex := len(arr) - 1

	for headIndex < tailIndex{
		sum := arr[headIndex] + arr[tailIndex]
		if sum == target {
			return []int{headIndex + 1, tailIndex + 1}
		}

		if sum > target {
			tailIndex--
		} else {
			headIndex++
		}
	}

	return []int{}
}

这个技巧还可以用来做array、字串的反转等等
在leetcode有满多题目会用到这算法。

明天会介绍另外一种算法Silde window~
byebye!


<<:  [Day12]Die Game

>>:  Day3 什麽是Git?

如何找到想要的工作2-稻穗问题

稻穗问题 夕阳西下,麦田沐浴在余晖的彩霞之中。片片的麦田在微风里泛着金浪,金浪的尾端旁有一道崎岖的小...

【Day 01】- 孤灯蓑冠衣,独究程序码:前言与大纲

Agenda 资安宣言 自我介绍与参赛动机 适合阅读本系列文章的对象 本系列文章大纲 目标与展望 好...

Day7:如何使用Parrot Security的hping3扫描网路

今天我们来讲一下如何使用Parrot Security的hping3来扫描网路 首先登入Parrot...

[Day06] Tableau 轻松学 - Tableau Desktop 安装

前言 Tableau Desktop 版本更新非常快速,平均一季会推出一个新版本,每个版本之间在介面...

CI/CD - Drone 五分钟成为终极工具人

很久以前就想自己建个drone来实现CI/CD 原因是在公司里面通常都已经建好了,不然就是有MIS/...