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

温州做网站厉害的公司有哪些微信营销软件排行榜

温州做网站厉害的公司有哪些,微信营销软件排行榜,wordpress+3d线条,做网站如何上传apk文章目录 LeetCode?启动!!!题目:将元素分配到两个数组中 II题目描述代码与解题思路 每天进步一点点 LeetCode?启动!!! 又有段时间没写每日一题的分享了,原本今…

文章目录

  • LeetCode?启动!!!
  • 题目:将元素分配到两个数组中 II
    • 题目描述
    • 代码与解题思路
  • 每天进步一点点

LeetCode?启动!!!

在这里插入图片描述
又有段时间没写每日一题的分享了,原本今天是打算早上发完晨起计划之后发的,但是今天太忙了,忙着忙着一直没时间把文章写完,拖着拖着就拖到晚上了

只能在晚上离散数学的课上悄摸摸写完发了

题目:将元素分配到两个数组中 II

题目链接:将元素分配到两个数组中 II

题目描述

代码与解题思路

// 树状数组
type fenwick []int// 维护 [1, i] 的元素个数
func (f fenwick) add(i int) {for ; i < len(f); i += i & -i {f[i]++}
}// 获取 [1, i] 的元素个数和
func (f fenwick) pre(i int) (res int) {for ; i > 0; i &= i - 1 {res += f[i]}return res
}func resultArray(nums []int) []int {// 排序去重 -> 离散化sorted := slices.Clone(nums)slices.Sort(sorted)sorted = slices.Compact(sorted)m := len(sorted)a, b := []int{nums[0]}, []int{nums[1]}// 维护树状数组t1, t2 := make(fenwick, m+1), make(fenwick, m+1)for i, v := range sorted {if v == nums[0] {t1.add(i+1)} if v == nums[1] {t2.add(i+1)}}for _, x := range nums[2:] {// 二分查找离散化数组的下标位置l, r := 0, len(sorted)for l < r {mid := (l+r)>>1if sorted[mid] < x {l = mid+1} else {r = mid}}v := l+1// greaterCount: 用数组所有元素 - 小于等于 val 元素的数量 = 大于 val 元素的数量gc1 := len(a) - t1.pre(v)gc2 := len(b) - t2.pre(v)if gc1 > gc2 || gc1 == gc2 && len(a) <= len(b) {a = append(a, x)t1.add(v)} else {b = append(b, x)t2.add(v)}}return append(a, b...)
}

代码的核心思路比较短,题目比较好理解(看着像是一个简单的模拟题)但是他给到的数据范围是 10^5,也就是他没法用暴力的算法去做

根据题目需要维护大于某个数的元素个数的要求,以及 10^9 次方的数字大小,我们可以用离散化 + 维护树状数组解决

两个问题

1)如何离散化?

sorted := slices.Clone(nums)
slices.Sort(sorted)
sorted = slices.Compact(sorted)

排序去重好的 sorted 数组,假设是 [ 7, 12, 23, 40 ],我们在 nums 数组找到 23 这个元素的时候,就能根据这个元素在 sorted 数组中的位置,求的有 2 个数比他小,1 个数比他大

这就是离散化的意义

2)树状数组?

// 树状数组
type fenwick []int// 维护 [1, i] 的元素个数
func (f fenwick) add(i int) {for ; i < len(f); i += i & -i {f[i]++}
}// 获取 [1, i] 的元素个数和
func (f fenwick) pre(i int) (res int) {for ; i > 0; i &= i - 1 {res += f[i]}return res
}

关于上述代码的解释:(对于树状数组的简单解释)

为什么用树状数组?因为树状数组能够 logN 获取一个区间的前缀和,并能够 logN 的复杂度修改区间的值。

树状数组中,通过不断加上 lowbit 可以获得每个关键区间,让 [1, i] 区间增加或减少一个值(add 操作)

而通过不断减去 lowbit 可以获得区间和 [1, i](pre 操作)

求 lowbit 的方法:i & -i

减去 lowbit 的方法:i &= i-1

什么是 lowbit?

=> 10010 中,10 就是 lowbit

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。

http://www.mmbaike.com/news/100817.html

相关文章:

  • 湖北工程建设信息网站谷歌关键词排名优化
  • 网站用的横幅广告怎么做什么关键词可以搜到那种
  • 织梦cms做网站怎么样seo是什么意思
  • 网站建设的实验心得百度优化软件
  • 云筑网网站关键词百度自然排名优化
  • wordpress去除作者信息百度seo霸屏软件
  • 怎样给网站做一张背景重庆百度推广seo
  • 珠宝网站谁家做的好点击进入官方网站
  • 简单响应式网站设计代码百度账户托管公司
  • 动态网页的文件扩展名谷歌排名优化入门教程
  • 黑龙江省建设协会网站怎么买域名自己做网站
  • wordpress专栏seo百度发包工具
  • 服务器建设网站bing搜索国内版
  • 做营销网站那个好关键词在线试听
  • 毕业论文做cad图的网站网站收录申请
  • 做网站宝安站长工具站长之家官网
  • 境外 色情网站品牌营销策划方案案例
  • 做网站的电脑需要什么配置深圳全网营销平台排名
  • 网站建设的技术手段seo数据分析哪些方面
  • 泰安肥城做网站的公司苏州新闻今天最新消息新闻事件
  • 阳谷聊城做网站游戏优化
  • 网站建设公司的专业度该怎么去看高端网站制作
  • 想自己做网站推广互联网营销方案
  • 做书封面的模板下载网站专业优化网站排名
  • 网站建设销售前景搜索引擎优化的主要工作有
  • 哈尔滨企业网站制作重庆seo优化公司
  • 做文字的网站网络营销模式下品牌推广途径
  • 有什么网站可以做平面兼职百度推广页面投放
  • 湛江北京网站建设长沙百度推广运营公司
  • 做钓鱼网站用哪种编程语言seo免费入门教程