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

重庆有哪些做网站公司好网站建设服务优势

重庆有哪些做网站公司好,网站建设服务优势,外贸网站怎么营销,湖北省建设规划网站文章目录 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.15wanjia.com/news/188412.html

相关文章:

  • 网站建设框架程序个人工商户做网站要上税吗
  • 做网站需要审核资质吗哪个网站做五金冲压的
  • html5 视频网站 模板广州app定制开发公司
  • 有字体设计网站扶风网站开发
  • wordpress网站用户注册张掖北京网站建设
  • php做网站步骤哪个网站可以帮人做ppt
  • 如何建立的网站能争钱不知名网站开发
  • 不想花钱做网站推广临沂专业做网站公司
  • 北京 网站策划公司长沙快速网页制作
  • 苏州建设交通官方网站做网站需要准备的素材
  • 网站建设公司排行杭州沙发网站建设
  • 淘宝客网站跳转单品百度浏览器网页版
  • 找企业开发网站多少钱制作商城网站公司
  • wordpress网站自适应海康域名网站
  • 中小企业网站建设需要注意什么徐州网站建设开发
  • 长沙建一个网站大概要多少钱企业网站平台如何做网络推广
  • 一般网站做推广要多大的带宽和内存wordpress 编辑 插件
  • 建筑类企业网站模板自己建还是找代理建网站
  • 加关键词的网站怎么做一个公司网站
  • 四川交投建设招标网站昆山手机网站建设公司
  • 网站建设与维护高考试卷wordpress边栏显示
  • 大连网站建设收费青岛网页建站工具
  • 西安市住房和城乡建设局官方网站设计网页制作策划路程
  • 登录建设部网站小游戏制作软件
  • 做python一个网站做一个网站能卖多少钱
  • 免费企业网站模板源码教育类小程序开发
  • 以前做视频的网站旅游网站建设报价方案
  • 简洁软件下载网站源码一级造价工程师准考证打印时间
  • 哪个网站可以用MC皮肤做图片wordpress 流媒体
  • 婚庆公司网站模板网站建设 响应式 北京