oj和leetcode区别_刷leetCode上的题和其他OJ网站上的算法题对思维能力真的有帮助么?...

亲测有帮助。

下面的个人经验,只是关于在美国的学计算机的看法,因为是我出国才转计算机的,国内的情况两眼一抹黑,说错了大家别怪我。

从一开始2sum不会,到现在带着五个小伙伴一起刷。这中间经过了挺久,但要是没有LeetCode这样的平台,我的算法和数据结构可能永远停留在纸上谈兵的状态。

因为是转专业的,所以很多东西不知道从哪里学起,也走了很多弯路。

现在把我自己觉得特别好的资料分享给大家,希望大家刷题的过程中,能先从这些基础入手,把题目都弄明白。

其实刷题就是一个入口,等你题目刷得差不多了,就可以写一些项目,这些东西就能串起来了。

对生活的帮助的话,就是因为自己之前摸索出到底应该怎么刷题,然后带着小伙伴刷。收获了友谊,锻炼了英语,因为我们其实是一个international小组,有一个韩国小姐姐,我们必须说英语。

哈哈,以上是真事。但题主肯定不是指这么肤浅的方面啦。

对思维的帮助也有的,因为写代码就要很耐心啊,出了bug得查啊,这个过程很锻炼人的。

还有就是做事情更有条理了啊。

反正优点不少的,如果你想了解我到底怎么刷题的,可以去这个回答下参考一下,就不重复啦(你看看,这个就是像链表的next指针一样,就说有帮助的嘛。。。。):刷完LeetCode是什么水平,能拿到什么水平的 offer ?​www.zhihu.com

哦差点忘记了,在北美,计算机找工作就是要刷题。

不刷题的话,以后的连生活都没有。刷了其实也没有,因为不是在刷题面试,就是在刷题面试的路上。无限循环。

希望对你有帮助,希望你能给我点个赞,希望大家都能找到工作。

以上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是本人的一篇OJ实验报告,共涉及五个目。 一、目来源:LeetCode 1. Two Sum 问号:1 目描述:给定一个整数数组 nums 和一个目标值 target,请在数组中找出和为目标值的两个整数。假设每个输入只对应一种答案,且同样的元素不能被重复利用。 算法思路和分析:使用哈希表(Python中的字典)进行遍历,将数组中的元素作为键,元素下标作为值存入字典中,如果字典中已经存在目标值和当前遍历的元素的差值,则直接返回这两个元素在数组中的下标。 代码: ``` class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: d = {} for i, num in enumerate(nums): if target - num in d: return [d[target - num], i] d[num] = i return [] ``` 收获心得:通过这个目,我更加熟悉了Python中的字典以及哈希表的运用,同时也加深了对于遍历的理解。 二、目来源:LeetCode 15. 3Sum 问号:15 目描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 算法思路和分析:首先将原数组排序,然后使用双指针遍历数组,固定一个数,然后在其后面的数中使用双指针找到另外两个数,使得三数之和为0。为了避免出现重复的三元组,需要在遍历时跳过重复的数。 代码: ``` class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: nums.sort() res = [] n = len(nums) for i in range(n): if nums[i] > 0: return res if i > 0 and nums[i] == nums[i - 1]: continue l, r = i + 1, n - 1 while l < r: s = nums[i] + nums[l] + nums[r] if s == 0: res.append([nums[i], nums[l], nums[r]]) while l < r and nums[l] == nums[l + 1]: l += 1 while l < r and nums[r] == nums[r - 1]: r -= 1 l += 1 r -= 1 elif s < 0: l += 1 else: r -= 1 return res ``` 收获心得:本让我更加熟悉了双指针的运用,同时也加强了我对于数组排序和去重的理解。 三、目来源:LeetCode 70. Climbing Stairs 问号:70 目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 算法思路和分析:爬楼梯问可以使用动态规划来解决,设f(n)为爬到第n阶的不同方法数,由于每次只能爬1或2个台阶,所以到达第n阶的方法数为到达第n-1阶和到达第n-2阶的方法数之和,即f(n) = f(n-1) + f(n-2)。 代码: ``` class Solution: def climbStairs(self, n: int) -> int: if n == 1: return 1 if n == 2: return 2 dp = [0] * (n + 1) dp[1] = 1 dp[2] = 2 for i in range(3, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n] ``` 收获心得:通过这个目,我更加熟悉了动态规划的思想,同时也加强了我对于递推的理解。 四、目来源:LeetCode 121. Best Time to Buy and Sell Stock 问号:121 目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。注意:不能在买入股票前卖出股票。 算法思路和分析:使用双指针,一个指向最低价格,一个指向当前价格,遍历整个数组,更新最大利润。 代码: ``` class Solution: def maxProfit(self, prices: List[int]) -> int: if not prices: return 0 min_price = prices[0] max_profit = 0 for price in prices: if price < min_price: min_price = price else: max_profit = max(max_profit, price - min_price) return max_profit ``` 收获心得:本让我更加熟悉了双指针的运用,同时也加强了我对于数组遍历的理解。 五、目来源:LeetCode 206. Reverse Linked List 问号:206 目描述:反转一个单链表。 算法思路和分析:使用三个指针,分别指向当前节点、前一个节点和后一个节点,遍历整个链表,将每个节点指向前一个节点即可。 代码: ``` class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not head.next: return head pre = None cur = head while cur: tmp = cur.next cur.next = pre pre = cur cur = tmp return pre ``` 收获心得:通过这个目,我更加熟悉了链表的遍历,同时也加强了我对于指针的理解。 以上是我的OJ实验报告,通过这次实验,我学习到了许多算法和数据结构的知识,同时也加强了对于Python语言的熟悉程度,受益匪浅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值