leetcode
Posted seeney
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode相关的知识,希望对你有一定的参考价值。
1.两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:给定 nums = [2, 7, 11, 15], target = 9。 因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]
解:暴力解决法
class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ for i in range(len(nums)): for j in range(i+1, len(nums)) : if (nums[j] == target - nums[i]): return [i, j]
#second 99.55%
#用字典保存已扫描过的数及其下标,扫到一个数x时,字典中查找target - x是否在字典中,若在则找到结果
class Solution: def twoSum(self, nums, target): d = {} length = len(nums) for i in range(length): if target - nums[i] in d: j = d.get(target - nums[i]) return [j,i] d[nums[i]] = i
#80.88%
d = {} for i in range(len(nums)): if target - nums[i] in d: return [d[target-nums[i]], i] else: d[nums[i]] = i
#third class Solution: def twoSum(self, nums, target): d = {} for index_i, value_i in enumerate(nums): value_j = target - value_i if value_j not in d: d[value_i] = index_i else: index_j = d[value_j] return [index_j, index_i]
2.两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
50.pow(x,n)函数(求x的n次方)
1)递归法 class Solution: def myPow(self, x, n): if n < 0: return self.myPow(1/x,-n) if n == 0: return 1 if n == 2: return x*x return self.myPow(self.myPow(x,n/2),2) if not n%2 else x * self.myPow(self.myPow(x,n//2),2) #将幂不断除2,除到奇数时减1继续除,使得程序复杂度控制在O(log n)里。 --------------------- 2)按位运算 class Solution: def myPow(self, x, n): if n == 0: return 1 elif n < 0: x = 1/x n = -n ans = 1.0 while n > 0: if n&1 : ans *= x x *= x n >>= 1 return ans #为了消除递归使用了位运算及循环。虽然时间复杂度没变,但是大量冗余的代码并不比递归函数要快
69.x的平方根 二分法
class Solution: def mySqrt(self, x): """ :type x: int :rtype: int """ if x < 2: return x left = 0 right = x while left <= right: mid = (left + right) // 2 if x > mid * mid: left = mid + 1 ans = mid elif x < mid*mid: right = mid -1 else: return mid return ans
4. 两个排序数组的中位数
class Solution: def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ nums = nums1 + nums2 nums.sort() l = len(nums) if l % 2 : return nums[l//2] else: return (nums[l//2-1] + nums[l//2]) / 2
以上是关于leetcode的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段