BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #19153同步于 2017/9/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【建议】【问题】LeetCode 刷题心结

TTong
2017/9/7镜像同步32 回复
开始刷题,好几道题写完看了discuss和solution,给出的思想都很复杂,为什么不用自带的一些方法?是不是因为没法锻炼写代码的能力?还是我题意理解错了? 劳烦大神看两眼,说明一下,指条道~谢谢~ 4. Median of Two Sorted Arrays: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 我的AC答案: nums = nums1 + nums2 nums.sort() m = len(nums1) n = len(nums2) if (m + n) % 2 != 0: res = nums[(m+n)/2] else: res = (nums[(m+n)/2-1] + nums[(m+n)/2])/2.0 return res solution的答案: def median(A, B): m, n = len(A), len(B) if m > n: A, B, m, n = B, A, n, m if n == 0: raise ValueError imin, imax, half_len = 0, m, (m + n + 1) / 2 while imin <= imax: i = (imin + imax) / 2 j = half_len - i if i < m and B[j-1] > A[i]: # i is too small, must increase it imin = i + 1 elif i > 0 and A[i-1] > B[j]: # i is too big, must decrease it imax = i - 1 else: # i is perfect if i == 0: max_of_left = B[j-1] elif j == 0: max_of_left = A[i-1] else: max_of_left = max(A[i-1], B[j-1]) if (m + n) % 2 == 1: return max_of_left if i == m: min_of_right = B[j] elif j == n: min_of_right = A[i] else: min_of_right = min(A[i], B[j]) return (max_of_left + min_of_right) / 2.0 283. Move Zeroes: 我的AC答案: class Solution(object): def moveZeroes(self, nums): for i in range(len(nums)-1, -1, -1): if nums[i] == 0: nums.append(nums[i]) del nums[i] solution的答案没有Python版本。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
NachtZ机器人#1 · 2017/9/7
leetcode没法很严格的限定超时时间。所以你的方法能过也很正常。你有看到第四题要求你时间复杂度么。你的方法,时间复杂度是(m+n)log(m+n)。所以实际上,你的答案并不能称之为答案。 其实很多时候简单方法和复杂方法都能过一道题。不同的语言过一道题的恶心程度也不一样。你也会看到很多人热衷于写尽量短的solution(特别是python选手,喜欢写那种毫无可读性的一行代码)。这都看你刷题的目的了。我是觉得,刷题的目的,至少我刷题的目的,是为了笔试和面试时不挂算法。如果你觉得你这么做下去符合你最初的目的。那挑最简单的做法也无妨的。
TTong机器人#2 · 2017/9/7
不是挑简单题目做???♂???♂???♂是刚开始刷…大概懂你的意思,非常感谢你的意见~ 【 在 NachtZ 的大作中提到: 】 leetcode没法很严格的限定超时时间。所以你的方法...
dss886机器人#3 · 2017/9/7
沙发的意见非常中肯,不过为了找工作刷题的话,建议基础题目还是多看几种解法,很多题的解法有相通之处
TTong机器人#4 · 2017/9/8
好的~谢谢~ 【 在 dss886 的大作中提到: 】 : 沙发的意见非常中肯,不过为了找工作刷题的话,建议基础题目还是多看几种解法,很多题的解法有相通之处
NachtZ机器人#5 · 2017/9/8
我说的是挑简单的做法来做。如果你不是想去网易游戏,头条这种盯着算法考的公司,挑简单的题做没啥问题其实。 【 在 TTong 的大作中提到: 】 : 不是挑简单题目做???♂???♂???♂是刚开始刷…大概懂你的意思,非常感谢你的意见~ : leetcode没法很严格的限定超时时间。所以你的方法...
Zelda机器人#6 · 2017/9/8
One Liner是最没意思的解法。但是用Python刷提倒是挺好的,真练算法啊。一样的笨算法,用C++轻松过,用Python能过就见鬼了。 【 在 NachtZ 的大作中提到: 】 : leetcode没法很严格的限定超时时间。所以你的方法能过也很正常。你有看到第四题要求你时间复杂度么。你的方法,时间复杂度是(m+n)log(m+n)。所以实际上,你的答案并不能称之为答案。 : 其实很多时候简单方法和复杂方法都能过一道题。不同的语言过一道题的恶心程度也不一样。你也会看到很多人热衷于写尽量短的solution(特别是python选手,喜欢写那种毫无可读性的一行代码)。这都看你刷题的目的了。我是觉得,刷题的目的,至少我刷题的目的,是为了笔试和面试时不挂算法。如果你觉得你这么做下去符合你最初的目的。那挑最简单的做法也无妨的。
TTong机器人#7 · 2017/9/8
噢噢~ 感谢哦~ 【 在 NachtZ 的大作中提到: 】 : 我说的是挑简单的做法来做。如果你不是想去网易游戏,头条这种盯着算法考的公司,挑简单的题做没啥问题其实。 :
lt0506机器人#8 · 2017/9/8
你写的复杂度太高了。。。不是最优解
TTong机器人#9 · 2017/9/8
对呢。按理来说用Python会慢一些,但是好多个题反而写的短而且快了和其他的提交相比,可能是题目太简单了,我再多做些题目看看。。。。 【 在 lt0506 的大作中提到: 】 : 你写的复杂度太高了。。。不是最优解