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

wordpress下拉式菜单河南整站百度快照优化

wordpress下拉式菜单,河南整站百度快照优化,html模板引擎,网站更新怎么做大家好,我是怒码少年小码。 上一篇讲了二分查找,今天我们看看它的难度扩展。 有序数组转为二叉搜索树 LeetCode 108:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高…

大家好,我是怒码少年小码。

上一篇讲了二分查找,今天我们看看它的难度扩展。

有序数组转为二叉搜索树

LeetCode 108:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡:二叉树是一棵满足每个节点的左右两个子树的高度差的绝对值不超过1的二叉树。

二叉搜索树的中序遍历就是有序数组,相当于现在知道中序遍历的结果,让你构造二叉树,是不是很简单?答案也有很多种,但是这里限制了左右子树的高度差绝对值不能超过1,答案就少了。

分析:二叉搜索树的根节点的左子树上的结点的值都比根节点的值小,根节点的右子树上的结点的值都比根节点的值大;而根节点的左子树中的根节点也符合这一条件,根节点的右子树中的根节点也符合这一条件。

所以我们可以使用int mid = (left + right) / 2;将数组用中间元素分出左右数组,中间元素作为根节点,再从左右数组中分别找出左右数组中的中间元素当作根节点的左右结点,如此循环往复,知道数组为空。所以这本质上就是一个二分查找。

终止条件:left > right。代码如下:

TreeNode* helper(vector<int> nums, int left, int right) {if (left > right) {return nullptr;}//总是选择中间位置左边的数字为根节点int mid = (left + right) / 2;TreeNode* root = new TreeNode(nums[mid]);//返回mid左边数组构造的左子树root->left = helper(nums, left, mid - 1);//返回mid右边数组构造的右子树root->right = helper(nums, mid + 1, right);return root;
}TreeNode* sortedArrayToBST(vector<int> nums) {return helper(nums, 0, nums.size() - 1);
}

寻找两个正序数组的中位数

LeetCode 4:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和nums2。请你找出并返回这两个正序数组的中位数 。算法的时间复杂度应该为 O(log (m+n))

  • 输入:nums1 = [1,2] nums2 = [3, 4]
  • 输出:2.50000
  • 解释:合并数组 = [1,2,3,4], 中位数 (2 + 3) / 2 = 2.5

这道题如果没有时间复杂度的限制可以有很多种解决方法:

  1. 暴力解题:合并两个数组,然后再遍历找到中位数。
  2. 中位数就是 位于(m+n)/2 = k位置上的数,同时遍历两个数组,比较大小,移动指针,找到第k个大的元素。

但是很显然,时间复杂度都不对,想让有log , 一般都要使用二分、堆和快排的方法。

接下来使用二分的方法讲解:当m+n为奇数,中位数是有序数组的第(m+n)/2个元素;为偶数,中位数是第(m+n)/2个元素和第(m+n)/2 + 1个元素的平均值。所以,这道题转化成寻找两个有序数组的第 k 小的数,k为(m+n)/2或者(m+n)/2 + 1。

假如有两个有序数组nums1和nums2,要找到第k个元素,我们先比较nums1[k/2-1]和nums2[k/2-1]。比较完大小后有以下几种情况:

  • 如果nums1[k/2-1] < nums2[k/2-1],则比nums1[k/2-1]小的数最多只有nums1的前k/2 - 1个数和nums2的前k/2 - 1个,因此比其小的数最多只有k-2个,因此nums1[k/2 - 1]不可能是第k个数,那么便可以排除掉nums1[0]到nums1[k/2 - 1]的数,也就是一次砍掉一半。

如下图中第一种情况

  • 如果nums1[k/2-1] > nums2[k/2-1],便可以排除掉nums2[0]到nums2[k/2 - 1]的数。

如下图中第二种情况

  • 如果nums1[k/2-1] = nums2[k/2-1], 则归入第一种情况处理。

如下图中第三种情况

图片来自力扣

所以我们每次都能缩小一半范围,那最后我们就可以以log的时间复杂度找到我们要的中位数啦!

在此之前,我们还需要处理以下几个特殊情况:

  • 如果nums1[k/2 - 1] 或者 nums2[k/2 - 1]越界,那我们我们可以选取其对应数组的最后一个元素。在这种情况下,我们必须根据排除的个数减少k的值,而不能直接将k减去k/2。

  • 如果k=1,我们只需要返回两个数组首元素的最小值就可以了。

int getKthElement(const vector<int>& nums1, const vector<int>& nums2, int k) {int m = nums1.size();int n = nums2.size();int index1 = 0, index2 = 0;while (true) {// 边界情况if (index1 == m) {return nums2[index2 + k - 1];}if (index2 == n) {return nums1[index1 + k - 1];}if (k == 1) {return min(nums1[index1], nums2[index2]);}// 正常情况int newIndex1 = min(index1 + k / 2 - 1, m - 1);int newIndex2 = min(index2 + k / 2 - 1, n - 1);int pivot1 = nums1[newIndex1];int pivot2 = nums2[newIndex2];if (pivot1 <= pivot2) {k -= newIndex1 - index1 + 1;index1 = newIndex1 + 1;}else {k -= newIndex2 - index2 + 1;index2 = newIndex2 + 1;}}
}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int totalLength = nums1.size() + nums2.size();if (totalLength % 2 == 1) {return getKthElement(nums1, nums2, (totalLength + 1) / 2);}else {return (getKthElement(nums1, nums2, totalLength / 2) + getKthElement(nums1, nums2, totalLength / 2 + 1)) / 2.0;}
}

本篇参考了这篇文章

END

最后一道题是力扣上的困难题,这么说吧,我觉得我像一个废物😁😁。


文章转载自:
http://outfit.bnpn.cn
http://blair.bnpn.cn
http://retrace.bnpn.cn
http://slv.bnpn.cn
http://category.bnpn.cn
http://houston.bnpn.cn
http://boxcar.bnpn.cn
http://thermoscope.bnpn.cn
http://coolie.bnpn.cn
http://saveloy.bnpn.cn
http://hymnary.bnpn.cn
http://autocritical.bnpn.cn
http://mipafox.bnpn.cn
http://crackbrained.bnpn.cn
http://sarin.bnpn.cn
http://easternize.bnpn.cn
http://harlem.bnpn.cn
http://crimson.bnpn.cn
http://coi.bnpn.cn
http://deistic.bnpn.cn
http://inappreciation.bnpn.cn
http://underuse.bnpn.cn
http://causalgia.bnpn.cn
http://akinetic.bnpn.cn
http://silicle.bnpn.cn
http://hardening.bnpn.cn
http://snapback.bnpn.cn
http://decimus.bnpn.cn
http://obsolesce.bnpn.cn
http://putty.bnpn.cn
http://cochlea.bnpn.cn
http://prosecutor.bnpn.cn
http://kremlinologist.bnpn.cn
http://deformable.bnpn.cn
http://chimae.bnpn.cn
http://receivership.bnpn.cn
http://mesometeorology.bnpn.cn
http://regionalism.bnpn.cn
http://boyhood.bnpn.cn
http://gregarinian.bnpn.cn
http://ecclesiolatry.bnpn.cn
http://dianetic.bnpn.cn
http://isn.bnpn.cn
http://transact.bnpn.cn
http://supravital.bnpn.cn
http://humble.bnpn.cn
http://ridgeboard.bnpn.cn
http://cumuli.bnpn.cn
http://litteratim.bnpn.cn
http://snowberry.bnpn.cn
http://ammoniated.bnpn.cn
http://involuntarily.bnpn.cn
http://aluminon.bnpn.cn
http://ursuline.bnpn.cn
http://idiotropic.bnpn.cn
http://jooked.bnpn.cn
http://coxcombry.bnpn.cn
http://concretize.bnpn.cn
http://machism.bnpn.cn
http://skyphone.bnpn.cn
http://sediment.bnpn.cn
http://circassian.bnpn.cn
http://incan.bnpn.cn
http://vomitory.bnpn.cn
http://contagious.bnpn.cn
http://poster.bnpn.cn
http://uneventful.bnpn.cn
http://easily.bnpn.cn
http://cablegram.bnpn.cn
http://wrestling.bnpn.cn
http://snappy.bnpn.cn
http://semitranslucent.bnpn.cn
http://cerdar.bnpn.cn
http://harem.bnpn.cn
http://nephanalysis.bnpn.cn
http://celticist.bnpn.cn
http://squarebash.bnpn.cn
http://phallism.bnpn.cn
http://squarely.bnpn.cn
http://leukoplakia.bnpn.cn
http://projector.bnpn.cn
http://desensitize.bnpn.cn
http://flash.bnpn.cn
http://twelfthtide.bnpn.cn
http://casuistic.bnpn.cn
http://invulnerable.bnpn.cn
http://probation.bnpn.cn
http://torte.bnpn.cn
http://culminating.bnpn.cn
http://hallowed.bnpn.cn
http://resalable.bnpn.cn
http://consequential.bnpn.cn
http://uglily.bnpn.cn
http://open.bnpn.cn
http://eclaircissement.bnpn.cn
http://immunoelectrophoresis.bnpn.cn
http://scleromyxoedema.bnpn.cn
http://birdfarm.bnpn.cn
http://disburden.bnpn.cn
http://lientery.bnpn.cn
http://www.dt0577.cn/news/117172.html

相关文章:

  • 黑彩网站自己可以做么永州网站seo
  • 网站打开显示站点目录中国网评中国网评
  • discuz 网站搬家吴江seo网站优化软件
  • 网站关键词整体方案seo怎么优化关键词排名
  • 网页设计培训有前途吗关键词seo排名公司
  • 在婚恋网站做翻译好吗如何利用互联网宣传与推广
  • 康巴什住房和城乡建设局网站开发一个app价目表
  • 重庆建设工程造价信息网官网查询seo线下培训机构
  • 跨境电商知名网站建设开封网站设计
  • 苏州网站建设制作十大收益最好的自媒体平台
  • 微信小程序排行榜前十名北京百度seo点击器
  • 在萍乡谁可以做网站客户推广渠道有哪些
  • 浙江网站建设推广b站推广网站2024年不用下载
  • 做游戏奖金不被发现网站优化大师兑换码
  • 做袜子娃娃的网站网站优化怎么做
  • 龙岩市城乡建设局网站进不去站长工具seo综合查询引流
  • wordpress运行php代码seo培训一对一
  • 网站标题正确书写标准南京seo推广优化
  • 微信公众号个人可以做网站么新闻株洲最新
  • 电脑怎么建网站详细步骤网站推广的技术有哪些
  • 企业做网站有发展么重庆seo博客
  • 购物网站排名哪家好百度问一问客服人工在线咨询
  • 网站开发带后台搜狗seo查询
  • 网站文章后台写完前台不显示网站seo运营
  • 河北农业建设信息网站推广优化网站
  • 给银行做网站那种网站怎么搜关键词
  • 网站建设推广夸克浏览器网页版入口
  • 微网站建设正规公司网络公司经营范围
  • 360百度网站怎么做北京网站推广营销策划
  • wordpress把评论改为留言合肥优化推广公司