写作绅士,读作丧尸 X岛揭示板
顺猴者昌 逆猴者亡 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 官方公众号:【X岛揭示板】 官方微博: 【@X岛极速版】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.65945146 - 无标题 - 技术宅


回应模式
No.65945146
名 称
E-mail
标题
颜文字
正文
附加图片
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。

无标题 无名氏 2025-04-28(一)08:18:47 ID:1th3CTn [举报] [订阅] [只看PO] No.65945146 [回应] 管理
各位大佬好, 本肥刚刚开始接触力扣, 为什么这道题运行能通过但是提交一直显示超过时间限制啊? 请各位大佬赐教!
我的解法如下, 我的这个解法时间复杂度是O(log(min(m,n)))
------------------------------------------------------------
题目: 给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数 。
算法的时间复杂度应该为
O(log(m + n)) 。

示例1:

输入:nums1 = [1, 3], nums2 = 2[0,2]
输出:2.00000
解释:合并数组 = [1, 2, 3] ,中位数 2

示例2:

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

------------------------------------------------------------


我的解法:

class Solution:

def findMedianSortedArrays(self, nums1, nums2) -> float:



if len(nums1) > len(nums2):

return self.findMedianSortedArrays(nums2, nums1)



total = len(nums1) + len(nums2)

if total % 2 == 0:

is_even_total = True

else:

is_even_total = False



list1_with_sentinel = [float('-inf')] + nums1 + [float('inf')]

list2_with_sentinel = [float('-inf')] + nums2 + [float('inf')]



list1_left = 0

list1_right = len(list1_with_sentinel) - 1



while True:

list1_mid = (list1_left + list1_right) // 2

list2_ptr = total // 2 - list1_mid



list1_current_item = list1_with_sentinel[list1_mid]

list1_next_item = list1_with_sentinel[list1_mid + 1]

list2_current_item = list2_with_sentinel[list2_ptr]

list2_next_item = list2_with_sentinel[list2_ptr + 1]



if list1_current_item <= list2_next_item and list2_current_item <= list1_next_item:

if is_even_total:

left_part_max = max(list1_current_item, list2_current_item)

right_part_min = min(list1_next_item, list2_next_item)

median = (left_part_max + right_part_min) / 2

else:

right_part_min = min(list1_next_item, list2_next_item)

median = right_part_min

break

if list1_next_item < list2_current_item:

list1_left = list1_mid

if list2_next_item < list1_current_item:

list1_right = list2_ptr

return median
Tips 无名氏 2099-01-01 00:00:01 ID:Tips超级公民 [举报] No.9999999 管理
( `д´)就不能学学动画版的萌豚,多看看动画片
无标题 无名氏 2025-04-30(三)00:05:09 ID:Gs2SdhS [举报] No.65961890 管理
>>No.65953848
这个其实算算法竞赛的东西,大概就是没办法构造出让o(n)过不了的测试数据,因为读入测试数据就需要o(n)的时间。
但这和面试没关系,所以面试官找你要logn还是得给他写。
然后我说排序能过,意思是你过不了一定是你代码有bug,而不是题目精心构造了卡常数的测试数据。
无标题 无名氏 2025-04-30(三)00:06:48 ID:Gs2SdhS [举报] No.65961906 管理
其实acm的话不少o(n)的题nlogn都放人过的

UP主: