Golang leetcode209 长度最小的子数组

长度最小的子数组 leetcode209

初次尝试之动态规划 × 超出内存限制

利用如下图所示的思想,但是使用的空间太大了
在这里插入图片描述

// 动态规划方法 超出内存限制
func minSubArrayLen(target int, nums []int) int {
   
	L := len(nums)
	table := make([][]int, L)

	length := 0
	for i := 0; i < L; i++ {
   
		if nums[i] >= target {
   
			length = 1
			return length
		}
		table[i] = make([]int, L) //结果表
		table[i][i] = nums[i]     //对角线就是原本数据

		//fmt.Println(table[i])
	}

	//x, y := 0, 1

	//char := 0
outLoop:
	for i := 0; i < L-1; i++ {
   
		x := 0 //行数都是从0开始
		for y := i + 1; y < L; y++ {
   
			table[x][y] = table[x][y-1] + table[x+1][y] - table[x+1][y-1]
			if table[x][y] >= target {
    //如果当前的连续已经超过或等于target
				length = y - x + 1
				break outLoop //第一个大于target的目标即为最短的连续数组
			}
			x++
		}

	}

	for i := 0; i < L; i++ {
   
		fmt.Println(table[i])
	}

	return length
}

滑动窗口(?)我的猪鼻版本

func minSubArrayLen(target int, nums []int) int {
   
	L := len(nums)
	n := 0 //n用来计算最小的连续数

	left := 0
	right := 0
	add := 0

	for {
    //第一个for用来找到第一组满足要求的连续数,后续再进行缩小
		right = left + n
		if right == L {
   
			return 0
		}
		add += nums[right]
		n++
		if add >= target {
   
			N := n - 1
			for left != L {
    //第二个for进行缩小
				add -= nums[left]
				left++
				if add >= target {
   
					n--
					N = n - 1
					continue
				}
				right = left + N
				if right == L {
   
					break
				}
				add += nums[right]
			}

			return n
		}
	}

}

正宗版滑动窗口

func minSubArrayLen(target int, nums []int) int {
   
	add := 0
	left, right := 0, 0
	L := len(nums)
	length := L + 1 //为了方便判断有无总和超过target

	for right != L {
   
		add += nums[right]
		for add >= target {
    //当 当前 窗口内总和大于等于 target 为边界条件;
			length = min(length, right-left+1) //更新最短长度
			add -= nums[left]                  //删除画出的数据
			left++                             //左指针右移
		}
		right++

	}
	if length == L+1 {
   
		return 0
	}
	return length
}

相关推荐

  1. 209.长度数组

    2023-12-22 08:06:05       38 阅读
  2. 209. 长度数组

    2023-12-22 08:06:05       49 阅读
  3. 209. 长度数组

    2023-12-22 08:06:05       8 阅读
  4. 力扣209-长度数组

    2023-12-22 08:06:05       41 阅读
  5. leetCode209.长度数组

    2023-12-22 08:06:05       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 08:06:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 08:06:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 08:06:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 08:06:05       20 阅读

热门阅读

  1. 静态单赋值(SSA)(只讲形式不讲实现)

    2023-12-22 08:06:05       35 阅读
  2. python类和对象

    2023-12-22 08:06:05       45 阅读
  3. Servlet技术j详解1

    2023-12-22 08:06:05       34 阅读
  4. Hive动态分区和分桶

    2023-12-22 08:06:05       38 阅读
  5. Hive-基础介绍

    2023-12-22 08:06:05       37 阅读
  6. Hive-分区与分桶详解(超详细)

    2023-12-22 08:06:05       34 阅读
  7. redis 实现队列

    2023-12-22 08:06:05       47 阅读
  8. 算法练习Day18 (Leetcode/Python-二叉树)

    2023-12-22 08:06:05       43 阅读
  9. python3+selenium 切换窗口方法

    2023-12-22 08:06:05       39 阅读
  10. 流媒体知识总结

    2023-12-22 08:06:05       43 阅读
  11. 在 Go 语言中使用 regexp 包处理正则表达式

    2023-12-22 08:06:05       34 阅读
  12. Ansible3

    Ansible3

    2023-12-22 08:06:05      40 阅读