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

网站开发发展趋势2018电子商务网站建设实训心得体会

网站开发发展趋势2018,电子商务网站建设实训心得体会,国内网站赏析,广东省新闻文章目录 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.yayakq.cn/news/58563/

相关文章:

  • 海报石家庄网站建设优化
  • 昆明网上商城网站建设济南h5网站建设
  • php网站开发好学吗受欢迎的网站建设
  • 网站备案号要怎么查询建立网站需要钱吗
  • 企业建站系统开源深圳宝安通网站建设
  • 修改公司网站如何通过轻淘客做网站
  • 资讯门户类网站百度推广和百度竞价有什么区别
  • 网站建设及维护涉及哪些内容电子商务是干什么工作的
  • 西安网站建设瑞信郑州网络推广方法
  • 网站推广软文代发wordpress 获取评论id
  • 男的和女的做那个视频网站系统管理在哪里找怎么找
  • 柬埔寨做网站我做的网站怎么打开很慢
  • 网站建设咨询有客诚信asp网站源码下载
  • 瓷器网站怎么做怎么做盗文网站
  • 上海做网站比较有名的公司有哪些北京网站建设是什么
  • 2014网站设计风格微信公众号(网站建设)合同
  • 网站外链建设可以提升网站权重吗新华社两学一做网站
  • 制作一个网站需要多少时间公众号平台助手
  • 如何做一份网站的数据分析软件开发培训费用
  • 哈尔滨专业网站建设定制linux创建网站
  • 杭州网站基建微商网站开发
  • flash网站建设教程Wordpress如何自定义小工具
  • 适合学生做网页练习的网站电商运营推广方案
  • 湘潭企业网站建设 p磐石网络律师网络推广哪个比较好
  • 网站源码下载 用户注册七牛云免费服务器
  • 网站从建设到上线流程荆州哪有做网站的公司
  • 服务网站运营方案网站建设工作自查报告
  • 怎么下学做衣服网站网站空间和数据库的关系
  • 主机 可以 多少 网站wordpress勾子
  • 网站规划设计的步骤搭建一个wordpress网站多钱