首页 > 其他分享 >代码随想录day27 || 455 分饼干,376 摆动序列,53 最大子序列和

代码随想录day27 || 455 分饼干,376 摆动序列,53 最大子序列和

时间:2024-08-12 12:16:37浏览次数:10  
标签:count return int quicksort 随想录 455 var child 序列

分饼干

func findContentChildren(g []int, s []int) int {
	// 第一思路,双指针暴力解法
	var count int
	var used2 = make([]bool, len(s))
	g = quicksort(g)
	s = quicksort(s)
	for _, child := range g {
		for idx, cookie := range s {
			if !used2[idx] && cookie >= child{
				used2[idx] = true
				count++
				break  // 该child分到饼干就退出循环,让下一个child参与
			}
		}
	}

	return count

}

func quicksort(li []int) []int{
	if len(li) == 0 {
		return nil
	}

	r := rand.New(rand.NewSource(time.Now().Unix()))
	povid := li[r.Intn(len(li))] // 随机值作为基准

	var left, right, equal []int
	for _, l := range li {
		if l > povid {
			right = append(right, l)
		}else if l < povid {
			left = append(left, l)
		}else {
			equal = append(equal, l)
		}
	}

	left = quicksort(left)
	right = quicksort(right)

	return append(left, append(equal, right...)...)

}

// 必须要排序,不然可能出现最大的饼干分给需求最小的child,导致后面较大的需求无法满足
时间 快排nlogn * 2 + n^2  空间 n
func findContentChildren(g []int, s []int) int {
	// 第一思路,另一种写法
	var count int
	var idxs int
	g = quicksort(g)
	s = quicksort(s)
	for _, child := range g {
		for idxs < len(s) {
			if s[idxs] >= child {
				count++
				idxs++
				break
			}
			idxs++
		}
	}
	return count
}

376 摆动序列

image

func wiggleMaxLength(nums []int) int {
	// 思路 遇到相邻元素积是0或者负数,计数加一
	if len(nums) == 1 {
		return 1
	}

	var diffpre, diff, count int
	for i := 1; i < len(nums); i++ {
		diff = nums[i] - nums[i - 1]
		if diffpre <= 0 && diff > 0 ||
			diffpre >= 0 && diff < 0 {
			count++
		}
		if diff != 0 { // 出现单调情况再赋值,避免出现情况4也被统计
			diffpre = diff
		}
	}
	return count + 1
}

53 最大子序列和

func maxSubArray(nums []int) int {
	// 分别存储连续和以及最大和,连续和不断贪心往后累加,如果大于最大和就更新最大和
	// 连续和更新逻辑,如果目前大于0,往后累加,如果小于0,舍弃,直接等于当前元素

	var sum, maxsum int
	maxsum = math.MinInt
	for _, v := range nums {
		if sum >= 0 {
			sum += v
		}else {
			sum = v
		}

		if sum > maxsum {
			maxsum = sum
		}
	}
	return maxsum
}

标签:count,return,int,quicksort,随想录,455,var,child,序列
From: https://www.cnblogs.com/zhougongjin55/p/18354704

相关文章

  • 洛谷 P4556 雨天的尾巴之线段树合并模板
    洛谷P4556题解传送锚点摸鱼环节[Vani有约会]雨天的尾巴/【模板】线段树合并题目背景深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以......
  • 基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物
    植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重......
  • 基于MATLAB长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析等领域
    植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重......
  • 深入解析@JsonValue注解在Java序列化中的应用
    深入解析@JsonValue注解在Java序列化中的应用在Java开发中,对象序列化是一个常见的需求,尤其是在进行网络通信或者数据持久化时。Jackson库作为Java领域内一个非常流行的JSON处理库,提供了强大的序列化和反序列化功能。在Jackson2.9版本之后,@JsonValue注解的引入,为开发者提供......
  • 【待看】一周一深入之深入剖析PHP反序列化phar、session、soap反序列化
    引言接上个文章,一周一深入之深入剖析PHP反序列化上个文章把php反序列化的基础以及trick总结完了,这篇文章就总结一下PHP常见的三个组件反序列化,Phar、session、soap反序列化。一周一深入之深入剖析PHP反序列化phar、session、soap反序列化引言一、什么是Phar以及Phar反序列化Phar......
  • 序列(sequence)
    题目链接:序列(sequence)csdn食用更佳:序列(sequence)思路分析距离计算:定义两个序列$a$和$b$的距离为$(\sum_{i=1}^{n}(a_i-b_i)^2)$。我们需要通过交换$a$中的元素来最小化这个距离。最小化距离:由于$a$和$b$中的元素都是唯一的,我们可以通过将$a$中的......
  • CVE-2019-12422~shiro反序列化【春秋云境靶场渗透】
    #今天我们来攻克CVE-2019-12422春秋云境这个靶场漏洞当我们知道了该靶场是shiro反序列化漏洞,所以直接用工具梭哈好小子,离成功又近一步!!!......
  • 时间序列分析
    平稳性检验时序图自相关系数图纯随机性检验方法性工具差分运算延迟算子线性差分方程AR模型......
  • Prufer序列
    Prufer序列Prufer序列可以将一个带标号\(n\)个结点的树用\([1,n]\)中的\(n-2\)个整数表示,也可以理解为完全图的生成树与数列之间的双射。建立过程:每次选择编号最小的叶子节点并删掉,然后在序列中记录它连接的节点标号,重复\(n-2\)次后结束。不难发现:构造完Pruf......
  • web渗透-反序列化
    一:概念1、序列化:将变量转化为可保存或者可以传输的字符串的过程;实现函数是serialize()函数(变量转化成字符串)2、反序列化:把这个字符串在转化成原来变量使用;就是序列化的逆过程;实现函数是unserialize()函数(字符串转换成变量)3、示例<?phpclassStudent{ public$name="admin";......