最新要闻
- 龙法好“枫”景 | 源头预防,前端化解!
- 官宣,国际足联做出争议决定:梅西贝克汉姆很意外,球迷骂声一片
- 中生联合(03332.HK):上半年实现归母净利2782.2万元
- 健康列车四进大凉山为彝族群众送医就诊
- 明日23时起,海口这些区域将水压偏低或无水
- 翔腾新材(001373.SZ):上半年营业收入3.38亿元
- 8.28:利好刺激,早盘大幅高开后低走,下午A股能否走强?
- 董明珠自曝70岁没保养 怒斥与小鲜肉谣言:为了蹭点流量 搞歪门邪道
- 我国首条跨海高铁!福厦高铁全线站房建设完成:今年通车
- 中间边框终于没了!微软新Surface Duo专利现身
- 15.98万起史低 马自达CX-50有优惠了:官方直补10000元
- 盗图把作者P掉还获影赛一等奖,主办方:会给一个满意解释
- 陇南市狂犬疫苗接种地点(接种时间+联系方式)
- ST天圣2023年上半年净利-5078.29万 亏损增长9.23%
- 怀孕梦到蛇预示着什么 怀孕梦到蛇预示着什么还杀了一条
- 7月份我国交通运输经济继续保持恢复态势 主要指标同比均实现增长
手机
八一锐评丨战场保障分秒必争
市文明办主办暑期示范夏令营启动 仪有礼 心有梦 争做文明好少年
- 八一锐评丨战场保障分秒必争
- 市文明办主办暑期示范夏令营启动 仪有礼 心有梦 争做文明好少年
- 不到千元搞定卫浴焕新!京东家装建材超级品类日携九牧、奥普、欧派等推出一口价套餐 具体是什么情况?
- 电影《封神第一部》票房超《捉妖记》进入中国影史票房榜前二十五
- 中信重工(601608.SH):二季度计提各类资产减值准备5602.90万元
- 拘留!司机为拉客,买假证冒充便衣民警
家电
Leetcode刷题笔记——单调性
单调性
单调性是数学中使用的一种常见性质,通常用于描述函数,在高等数学中的定义常常为:
设函数f(x)在区间I上有定义,如果对于I上的任意两个数x1和x2,当x1
(资料图)
例如如下图像就是两个单调函数。
利用单调性我们可以减少很多重复的运算。例如,对于如下函数,我们给定其定义域为[0,+∞)
,现在要求查找出在其定义域内所有f(x)即y大于0.5的区间
。
- 如果不借助单调性,我们需要采用遍历的方法,依次遍历定义域中的所有点x,判断其f(x)是否满足条件(大于0.5)。
- 如果借助单调性,我们知道上述函数是严格单调递增的,其图像如下:绿线表示y=0.5的图像,处理该问题,只需要找到方程
0.5=(1/3)x^3
的解x0,由于函数具有单调性,且单调递增,因此,所有大于x0的区间内的x其f(x)都满足大于0.5。
对于计算机语言来说,用于表示函数的常见数据结构就是数组,我们可以通过
- 原数组本身的单调性
- 构造单调性
简化许多运算。下面引入几个例子:
15. 三数之和823. 带因子的二叉树
15. 三数之和
题目:给你一个整数数组 nums
,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j、i != k 且 j != k
,同时还满足 nums[i] + nums[j] + nums[k] == 0
。请你返回所有和为 0 且不重复的三元组。
注意:
- 答案中不可以包含重复的三元组
- 3 <= nums.length <= 3000
- -10^5 <= nums[i] <= 10^5
按照最朴素的解决方法,三层循环,循环遍历整个数组,然后再对整个结果进行去重,便可以解决该问题,但是时间复杂度为O(n^3),由于过于简单,这里给出伪代码:
list = [][]int{}for i:=0;i <= len(nums)-3;i ++ { for j:=i+1;j <= len(nums)-2;j ++ { for k:= j+1;k < len(nums)-1;k ++ { if nums[i]+nums[j]+nums[k] == 0 { list = append(list, []int{nums[i],nums[j],nums[k]}) } } }}对list去重
本题目首先要求我们去重
,因为返回结果要求不重复
,对于去重
常见的做法:
- 使用数据结构set、map进行处理,但是会额外占用内存
- 对原始数据排序,然后按序处理跳过重复项
优化掉去重问题后,我们可以尝试对内层的两层for循环进行优化,这里就引入了一个经典的方法:构造单调性,根据单调性进行查找
。
巧妙的方法
如果nums[i]确定,那么我们只需要寻找满足条件nums[j]+nums[k]=-nums[i]
的j、k
值,这就变成了一个二数之和的问题,暴力算法是直接进行遍历,然后查找该值,但是由于数组的有序性,我们有一种更加巧妙的方法:
- 由于当前数组的有序性,保证了数组本身是单调递增(或递减的,这里以递增为例)
- 设置指针p1、p2指向数组开头
p1=i+1
和结尾p2=len(nums)-1
- pred=nums[p1]+nums[p2],target=-nums[i]
- if target < pred,由于数组递增,nums[p2-1]
- if target > pred,由于数组递增,nums[p1+1]>num[p1],因此,p1 ++
- if target == pred,找到了目标,但为防止遗漏数据还要继续查找,此时指针向任意方向移动都没有影响,可以p1 ++或者p2 --
- if target < pred,由于数组递增,nums[p2-1]
- 直到p1 >p2则可以停止查找(=取决于需求,如果有需求可以>=或<=)
这个模式可以应用于很多地方,实际上具有单调性的函数一般都可以通过该办法查找,例如nums[j]*nums[k]=target
,查找j、k。了解了这个模式后,我们给出解决该问题的代码:
解题代码以及注释
import "sort"func threeSum(nums []int) [][]int {result := [][]int{}sort.Ints(nums) // 尝试固定i,然后将3数之和转化为两数之和for i := 0; i < len(nums)-2; i++ { // 对nums[i]进行去重if i-1 >= 0 && nums[i-1] == nums[i] {continue}sum := -nums[i]left := i + 1right := len(nums) - 1 // 解决两数之和问题,寻找left、right使得nums[left]+nums[right]==sumfor left < right {temp := nums[left] + nums[right]if temp == sum {result = append(result, []int{nums[i], nums[left], nums[right]}) // 去重nums[left]for left < right && nums[left] == nums[left+1] {left++} // 去重nums[right]for left < right && nums[right] == nums[right-1] {right--}left++right--} else if temp > sum {right--} else {left++}}}return result}
823. 带因子的二叉树
题目:给出一个含有不重复整数元素的数组arr
,每个整数arr[i]
均大于 1。用这些整数来构建二叉树,每个整数可以使用任意次数。其中:每个非叶结点的值应等于它的两个子结点的值的乘积
。满足条件的二叉树一共有多少个?答案可能很大,返回 对 10^9+7
取余 的结果。
例如:输入: arr = [2, 4, 5, 10]输出: 7解释: 可以得到这些二叉树: [2], [4], [5], [10], [4, 2, 2], [10, 2, 5], [10, 5, 2]
该问题是一个树相关的问题,并且对于父子结点处理过程是类似的。举例说明这件事:
对于输入arr=[18, 3, 6, 2]
,页结点可以为[2][3][6][18],可以把未显示的结点看做空结点,对于顶点为6的树可以为[6,2,3]或者[6,3,2],就需要借助叶节点信息。对于顶点为18的树可以为[18,3,6],[18,6,3],而组成以[6]的顶点的组合有3个。可以看到该问题是个动态规划问题。
f(18)=f(3)*f(6)f(18)=f(6)*f(3)f(6)=f(3)*f(2)f(6)=f(2)*f(3)f(3)=1f(2)=1
状态转换方程为:
\(f(a*b)= \begin{array}{ll} f(a)*f(b)*2+1 & a!=b,a为左子树b为右子树,和a为右子树b为左子树\\ f(a)*f(b)+1, & a==b\\\end{array}\)
那最后的问题就是查找在index属于[0,i-1]的数组中,哪些a,b满足arr[a]*arr[b]==arr[i]
,我们就可以使用上面提到的巧妙的方法类比解决该问题。这里就不再赘述。
解题代码和注释
func numFactoredBinaryTrees(arr []int) int { sort.Ints(arr) dp := make([]int64, len(arr)) res, mod := int64(0), int64(1e9 + 7) for i := 0; i < len(arr); i++ { dp[i] = 1 // 查找arr[left]*arr[right]==arr[right]*arr[left] for left, right := 0, i - 1; left <= right; left++ { for left <= right && int64(arr[left]) * int64(arr[right]) > int64(arr[i]) { right-- } if left <= right && int64(arr[left]) * int64(arr[right]) == int64(arr[i]) { if left == right { dp[i] = (dp[i] + dp[left] * dp[right]) % mod } else { dp[i] = (dp[i] + dp[left] * dp[right] * 2) % mod } } } res = (res + dp[i]) % mod } return int(res)}
关键词:
Leetcode刷题笔记——单调性
国内ERP对接各大零售平台开放文档
芦荟胶祛痘的正确用法(芦荟胶如何祛痘)
核污染防治板块热度不减 建工修复等多只个股涨停 中电环保五日大涨84%
全面改革+惩治腐败,让过度医疗无处藏身
全市重点项目建设再提速 为我市经济建设赋能蓄力
处暑时节,暑热渐消退,晨起锻炼避开两大误区,这样做越练越伤身
熊猫“美生”回保护区遭拦车?
德邦证券给予山西汾酒增持评级
大加更推晒照:永恒的8.24#MambaDay
八一锐评丨战场保障分秒必争
热闻|多所高校推出宿舍定制服务,学生拥有“室友选择权”啦!
国产x86芯片制造商海光信息上半年财报:净利润暴增60%
我国草原所成功建成“星—空—地”一体化草原智能感知预警平台
乐坪街道召开2023年“三基三创”工作中期评估分析会
“承载着快乐和忧伤”,疾驰的地铁开往何方?| 睡前聊一会儿
德国简化入籍程序又进一步,未来入籍更容易?
培养体育后备人才,长宁区走精兵强将之路
遵义农商银行助力小辣椒发展成大产业
龙法好“枫”景 | 源头预防,前端化解!
东莞控股(000828.SZ)将通过减资等方式退出一号线公司
2017年,一家三口车祸离世,保险公司拒绝赔付:受益人先死不用赔
海口秀英区赴上海开展数字产业招商:现场签约企业7家 签约总额达15.8亿元
中一科技:8月28日召开董事会会议
安徽法制报 | 明光:以过硬作风促高质量发展
中国民航局与卢森堡民航局举行会谈
生态环境部(国家核安全局)相关负责人就日本启动福岛核污染水排海答记者问
市文明办主办暑期示范夏令营启动 仪有礼 心有梦 争做文明好少年
头皮上的牛皮肤癣怎样*
马斯克试驾特斯拉Cybertruck 同时要求误差低于10微米
劳务分包如何确定用工主体的职责
邮储银行连城县支行:共谱银企合作新篇章
【金融街发布】财政部:前7个月全国发行地方政府债券49872亿元 专项债占比超六成
新财观 | 如何重构融资平台公司与地方政府的关系?
21解读|IPO、再融资新规关键词:收紧、限劣,与“网开一面”
宝利中标眉山城投沥青采购项目
齐家网上半年营收 4.97 亿增长 15.1%,亏损收窄
官宣,国际足联做出争议决定:梅西贝克汉姆很意外,球迷骂声一片
不到千元搞定卫浴焕新!京东家装建材超级品类日携九牧、奥普、欧派等推出一口价套餐 具体是什么情况?
文艺高逼格的店铺名字大全 一些文艺的店铺名字
孙睿(关于孙睿简述)
外交部:日方一意孤行,必须为此承担历史责任
玉龙雪山海拔 玉龙雪山简介
电流电压表接线方法 电流电压
满帮美股涨11.38%
技术创新要注重成果应用
五粮液:控股股东及其子公司自愿承诺1年内不减持
赞达亚登美国杂志写真 短裙加露背装凸显修长身材
海光信息、寒武纪等4家科创板公司发布新增回购方案,8月以来科创板累计回购金额上限达65.08亿元
中生联合(03332.HK):上半年实现归母净利2782.2万元
花垣1家“电竞旅馆”被依法查处!
五芳斋:董事长提议以6000万元-1亿元回购公司股份
健康列车四进大凉山为彝族群众送医就诊
开展非免疫规划接种意愿调查 护航儿童健康成长
监控:oracle数据库监控方案
纳芯微:8月23日召开业绩说明会,包括知名机构高毅资产的多家机构参与
明日23时起,海口这些区域将水压偏低或无水
爱因斯坦居然歧视中国人?私人日记揭露其真实想法,判若两人
江西武功山户外徒步登山口收取卫生费,当地:系村民代表会议决定的
术后吃鸽子会造成疤痕增生吗 吃鸽子有哪些好处
辟谣!“央行将实施大额存款新规”系谣言
中信银行:上半年净利润同比增长10.89%
网友称新车被人纵火烧毁,“若不是报警及时,一排车都会被烧”,官方回应:该案正在调查处理中
电影《封神第一部》票房超《捉妖记》进入中国影史票房榜前二十五
win10怎么安装ie11浏览器(win10怎么安装)
一年带货500亿 当辛巴和他的徒弟们“低垂的果实”摘尽,然后呢?
菜鸟快递历险记(关于菜鸟快递历险记简述)
孙万坤(关于孙万坤简述)
生态因素的概念 生态因素
植发股票有哪些股?(2023/8/26)
尤班克斯谈加盟太阳:其他球队也找过我 但一鸟在手胜过两鸟在林
8月28日下午,消息不得了,突然曝出1惊人消息,或将产生重大影响
中信重工(601608.SH):二季度计提各类资产减值准备5602.90万元
菌食亚目(关于菌食亚目简述)
菌种鉴别(关于菌种鉴别简述)
青岛:购买非限购区首套房,公积金贷款首付比20%
门店超4200家,东莞这家上市公司净利润同比增长158%
翔腾新材(001373.SZ):上半年营业收入3.38亿元
皖通高速07月03日被沪股通减持1.87万股
拘留!司机为拉客,买假证冒充便衣民警
美国一网红高温天玉米地里开法拉利起火 遭网友质疑博眼球
获取现金能力分析(关于获取现金能力分析简述)
如何选液晶电视底座(如何选液晶电视)
菜篮子计划(关于菜篮子计划简述)
菊花节(关于菊花节简述)
菊樱回转寿司(关于菊樱回转寿司简述)
武汉八古墩社区举办共享托管班,解决职工子女暑期托管难题
爱奇艺开通会员怎么用微信支付(爱奇艺开通会员)
【斗破苍穹】心炎异火排行之谜,陨落心炎为什么排行不高?
特朗普自首后,拜登公开调侃
专访《父辈的荣耀》总导演康洪雷:一部戏的味道
华为:数据存储将成继5G之后中国第二张科技名片 华为遥遥领先
天才少女13岁考上北大,赴美留学后嫁给了53岁美国教授,现状如何?
日本毒害海洋的第一波受害者已经出现
8.28:利好刺激,早盘大幅高开后低走,下午A股能否走强?
鼓励孩子的名言名句
真英雄!他潜入水中撬开车门,救回一条命
中通云配与孟连产投集团等企业达成战略合作
【8.27日播报】火星进入天秤座 幸运星座:天秤座、狮子座、巨蟹座、摩羯座
【20230828午评】资金分歧加剧,牛熊双方针锋相对