【算法学习】高级班1

在这里插入图片描述
在这里插入图片描述
答案一定位于:空桶左边的最大值和右边桶的最小值的差值
优化:桶内只保留最大值和最小值
在这里插入图片描述
在这里插入图片描述
2.
在这里插入图片描述
对于i位置,最优划分意味着一定是离i最近的能实现xor等于0的位置进行划分,假设划分k到i,若k不是最近的,中间还存在一个L,那么k到L和L到i可以形成两个划分。
在这里插入图片描述
3.
在这里插入图片描述
题目有误,是求第k大的数字
法1:双指针
法2:不断二分
法3(最优解):
核心思想是每次比较两个数组的中位数,来确定完全排序后中间位置数字的大概位置
假设两个数组长度分别是10和17,根据k可以分三种情况:
在这里插入图片描述

  • k<短的数组长度时,答案位于两个数组的前k个数字中

  • k介于两个数组中间时,答案取决于短数组是否全部小于长数组

  • 如果为情况3,比如k=23,则A只可能是后5个,B也只可能是后5个:
    在这里插入图片描述
    求第k大的数字的代码:
    在这里插入图片描述
    在这里插入图片描述

  • shorts[kth-l - 1]>=longs[l-1]代表longs中的所有数字在shorts可能是第k大的数字前面。

  • getUpMedian是求两个数组的上中位数。当kth<s时,第k大的数只可能出现在短数组或长数组的前k个数里面,因此求前k个数的上中位数就行了。求上中位数的方法是通过确定两个数组的中位数进行优化的

在这里插入图片描述

  • 算法思路(约瑟夫环)
    在这里插入图片描述
    在这里插入图片描述
    i是长度,S是被杀节点位置
    在这里插入图片描述
    由于S=(m-1)%i+1,得:
    在这里插入图片描述
    对于某个节点,长度为i时序号为x,返回其在长度为i-1时的序号
    在这里插入图片描述
  • 原题
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值