【算法每日一题 1】CordCoverMaxPoint

题目如下:

现在给你一个有序数组 Arr 从左到右依次表示在X轴上的坐标

现在给你一个绳子 长度为K个标准单位 试问最多能盖住几个点

解题思路:

要解决这个问题我们首先要想到一个小的贪心思路 如果说这个绳子的末尾盖住了一个点 那么这个绳子就有可能盖住最多的点

这是因为如果我们将这个绳子末尾往后移 不会再增加新的点 反而可能会让原来盖住的点消失

那么围绕着这个小贪心 我们就可以设计出一个滑动窗口的解决思路

我们设计两个指针 L 和 R 分别假设为绳子的开头和末尾 只要R 和 L之间的距离不超过K 那么这个方案就是可行的

Go语言代码示例如下

func CordCoverMaxPoint(slcArr []int, lnK int) (lnAns int) {
	if len(slcArr) == 0 {
		return 0
	}

	lnLeftIndex := 0
	lnRightIndex := 0
	lnAnswer := 0
	lnNum := len(slcArr)

	for lnRightIndex < lnNum {
		// 此时右下标可以继续加
		if slcArr[lnRightIndex]-slcArr[lnLeftIndex] < lnK {
			lnRightIndex++
		} else { // 此时绳子长度不够了 左下标右移
			lnLeftIndex++
		}

		lnAnswer = max(lnAnswer, lnRightIndex-lnLeftIndex+1)
	}

	return lnAnswer
}

你可能感兴趣的:(算法刷题,算法,数据结构)