当前位置: 首页 > news >正文

建网站公司郑州金戈枸橼酸西地那非

建网站公司郑州,金戈枸橼酸西地那非,wordpress主题函数CHM,泰安专业的网站建设【LeetCode】3356、零数组变换 II 文章目录 一、数据结构-差分-一维差分、二分1.1 数据结构-差分-一维差分、二分1.1.1 题意复述1.1.2 思路1.1.3 手写二分1.1.4 sort.Search() 二分1.1.5 sort.Find() 二分 二、多语言解法 一、数据结构-差分-一维差分、二分 1.1 数据结构-差分…

【LeetCode】3356、零数组变换 II

文章目录

  • 一、数据结构-差分-一维差分、二分
    • 1.1 数据结构-差分-一维差分、二分
      • 1.1.1 题意复述
      • 1.1.2 思路
      • 1.1.3 手写二分
      • 1.1.4 sort.Search() 二分
      • 1.1.5 sort.Find() 二分
  • 二、多语言解法


一、数据结构-差分-一维差分、二分

1.1 数据结构-差分-一维差分、二分

1.1.1 题意复述

题意复述: 有 nums[] 数组(如 [2, 0, 2]), 有 queries[] 数组(如 [[0,2,1], [0,2,1], [1,1,3]])

遍历 queries, 对每个 queries[i] 为 [li, ri, vali]
可以把 介于 nums[li…ri] 的元素的子集, 减去 [0…vali] 的数

问最终需操作几个 queries[], 可使 nums[] 全部变为 0. 记答案为 k(即操作的是 queries[0…k])

1.1.2 思路

因为操作的是 nums[li…ri] 的【子集】, 且减小的数 【最多】为 vali, 所以 k【越多越好】.
即 k 越多, 越满足答案. 【具备单调性】, 所以可用 【二分法】.

二分法: 是指, 从 queries[] 数组的长度的二分, 即 queries[0…len(queries)] 中 k 从 i = 0, j = len(queries) 的 二分.
二分的 check() 函数, 即为 【LeetCode 3355】 的过程.
最终返回二分的 k 即可.

二分法的注意: 用 开区间 确实更容易写边界条件

  1. 没有 +1 或 -1 的判断
  2. 最后返回的值 肯定是 l 或 r, 只需根据 二分的分支 确定 l 的含义, r 的含义, 即可

1.1.3 手写二分

// go
func minZeroArray(nums []int, queries [][]int) int {n := len(nums)check := func(k int) bool {d := make([]int, n+1) // 差分数组for _, q := range queries[:k] { // k锁定了queries[]的前k项start, end, val := q[0], q[1], q[2]d[start]+=vald[end+1]-=val}now := 0for i := range n {now += d[i]if now < nums[i] {return false}}return true}q := len(queries)l, r := -1, q+1 // 左开右开区间for l + 1 < r {m := l + (r-l)>>1if check(m) {r = m // m 已经符合, 但为了找更小的, 再向左找} else {l = m // 不符合, 则需找更大的(向右找), 因为k越大越符合题意}}if r <= q {return r // 因为二分中 check(m) 符合时, r 为 m. 所以最终返回的 r 就是符合题意的}return -1 // r == q+1
}

1.1.4 sort.Search() 二分

func minZeroArray(nums []int, queries [][]int) int {n := len(nums)check := func(k int) bool {d := make([]int, n+1) // 差分数组for _, q := range queries[:k] { // k锁定了queries[]的前k项start, end, val := q[0], q[1], q[2]d[start]+=vald[end+1]-=val}now := 0for i := range n {now += d[i]if now < nums[i] {return false}}return true}q := len(queries)ans := sort.Search(q+1, func(k int) bool { // sort.Search() 是找第一个 true 的下标return check(k)})if ans <= q {return ans}return -1 // r == q+1
}

1.1.5 sort.Find() 二分

func minZeroArray(nums []int, queries [][]int) int {n := len(nums)check := func(k int) bool {d := make([]int, n+1) // 差分数组for _, q := range queries[:k] { // k锁定了queries[]的前k项start, end, val := q[0], q[1], q[2]d[start]+=vald[end+1]-=val}now := 0for i := range n {now += d[i]if now < nums[i] {return false}}return true}q := len(queries)// 因为 sort.Search() 是找第一个 f() == true 的下标, 而 sort.Find() 是找第一个 f() <= 0 的下标, 所以此处定义 sort.Find() 的 f 为 if check(k) {return 0}ans, found := sort.Find(q+1, func(k int) int { // sort.Find() 是找第一个 f() <= 0 的下标if check(k) {return 0 // <= 0}return 1})if found {return ans}return -1 // r == q+1
}

二、多语言解法

C p p / G o / P y t h o n / R u s t / J s / T s Cpp/Go/Python/Rust/Js/Ts Cpp/Go/Python/Rust/Js/Ts

// cpp
// go 同上
# python
// rust
// js
// ts
http://www.sczhlp.com/news/88049/

相关文章:

  • 上传网站图片处理有域名之后怎样进行网站建设
  • 1.网站建设分为哪几个阶段做网站简介
  • 多态--成员变量、成员函数、静态函数
  • Linux操作系统相关问题汇总
  • 网站开发最严重的问题河南室内设计网
  • 有哪些网站做电子元器件比较好wordpress关闭页面评论
  • 搬瓦工做网站稳定吗有什么好的建站公司
  • 现在pc端网站开发用的什么技术做外贸怎么上国外网站
  • 福田网站(建设深圳信科)口腔医院网站建设
  • 重庆做网站建设公司排名wordpress首页修改路径
  • 怎么做英文的网站承德专业做网站的公司
  • 商务网站开发的基本流程oa办公软件手机版
  • 太原建筑市场网站芜湖高端网站建设公司
  • 有网站代码怎么建设中国法律服务网app最新下载
  • Dw做网站怎么加logo江门建设企业网站
  • 鲜花 9.10
  • 【工具】配置笔记本电脑安装centos7关闭盖子不休眠
  • 括号匹配
  • ECT-OS-JiuHuaShan框架的真正意义是打破还原论和人类中心论,公理是客观存在与数学逻辑,不依赖于人类理解与否。
  • z-index的使用方案
  • wordpress网站设计作业wordpress点击阅读全文
  • 推广型网站建设机构wordpress 4.5多用户
  • 永州建设公司网站国外设计公司名字
  • 什么是可信网站认证app软件制作多少钱
  • wordpress的网站怎么让他上线企业网站建设模版
  • 网站seo外包烦恼可以做网站吗
  • 新注册公司网站免费怎么做当当网书店网站建设案例
  • 南京网站优化网页图片居中代码
  • 北京建网站的公司网站注册理由
  • 网站界面设计简单网页制作的价格大概