力扣算法题
文章平均质量分 63
sinat_41789374
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leecode 888:公平的糖果棒交换
leecode 888:公平的糖果棒交换爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。如果有多个答案,你可以返回其中任何一个。保证答案存在。来源:力扣(LeetCode原创 2021-02-01 17:16:54 · 376 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树解题思路:找到列表的中点作为根节点,节点左节点比其小,右节点比其大,由于列表是已排序的,所以使用递归方法将左右两边的列表传入函数中递归计算。若列表为空,或者子节点的左子树或右子树为空则返回None.class Solution: def sortedArrayToBST(self, nums): if not nums: ...原创 2020-03-23 15:42:05 · 192 阅读 · 0 评论 -
101.对称二叉树(简单)
解题思路:递归:从根节点开始遍历树,若一个树为空,则该树为对称树,返回True,若这个树不为空,则使用递归判断其是否为对称二叉树。对称可以考虑为该节点的左子树的左子树和右子树的右子树相同。若一个二叉树是对称的,那么其子树肯定也是对称的,所以可以使用递归来判断。设置最后跳出的情况为:1.左右节点都为空;2.左右节点有一个非空;3.左右节点不相等class Solution: de...原创 2019-12-17 17:07:09 · 176 阅读 · 0 评论 -
100.相同的树(简单)
解题思路:使用递归遍历树。当两个树同时为空时返回True,当两个树中只有一个为空时返回False。当前节点非空时,开始比较,若当前节点值相同时,若左节点、右节点同时为空时,返回Ture,非空的话则将其左右节点作为函数的输入比较其左、右节点是否相同。循环遍历到有一方的节点为空为止。class Solution: def isSameTree(self, p: TreeNode, q: ...原创 2019-12-13 14:12:25 · 139 阅读 · 0 评论 -
88. 合并两个有序数组(简单)
解题思路:使用 i 遍历nums1,由于两个数组都为有序数组所以可以直接比较第 i 个元素和nums2中的元素,若第i个元素比nums2中第一个元素大的话,则将nums2中的的第一个元素插入到第i个位置,将nums2[0]删除(nums2数组中始终保存着没有插入的元素),若第i个位置小于nums2中的第一个元素则 i+1,继续比较下一个元素与nums2中第0个元素的大小。若到最后i >=...原创 2019-12-13 09:52:33 · 179 阅读 · 0 评论 -
83. 删除排序链表中的重复元素(简单)
解题思路:使用两个指针,用pre指针遍历链表,另外一个res指针记录非重复元素。当pre指针元素与res指针记录的元素不同时,res指针指向下一个位置,再将pre指针中的元素赋值给res指针。最后pre遍历完成后将res指向None以删除后面的所有元素。def deleteDuplicates(self, head): pre = head res = head w...原创 2019-12-12 16:20:40 · 167 阅读 · 0 评论 -
70. 爬楼梯(简单)
解题思路1:使用斐波那契序列:从第二个之后第n个结果为n - 1, n - 2项之和。使用递归调用。def climbStairs(n): ''' if n == 0: return 0 if n == 1: return 1 if n == 2: return 2 if n > 2: ...原创 2019-12-10 18:44:43 · 153 阅读 · 0 评论 -
69.x的平方根
解题思路:二分法可以一次性排除一半的范围。若mid的平方大于x,则范围在(l,mid -1),令r = mid -1,反之在(mid, r)的范围,令l = mid。直到l <= r,返回l。若mid的平方正好等于x则直接返回mid。def mySqrt(x): r = x while l < r: mid = l + (r - l + 1) //...原创 2019-11-27 19:10:12 · 160 阅读 · 0 评论 -
67.二进制求和(简单)
解题思路一:暴力遍历(88ms)将a转换为a、b中最长的字符串,将a、b转换为数字列表a1、b1不用来回转换元素类型方便计算。设置i为b1的索引号(从后往前),设置j为a1的索引号(在遍历的时候使用-j以从后往前遍历)。从后往前遍历b1(短的字符串对应的列表),将a1相对应的位置赋值为a1、b1列表中对应元素的和。判断a1列表中的数值是否存在数值2,若存在2则对应位置赋值为0,前一位置加1,为...原创 2019-11-27 16:28:42 · 284 阅读 · 0 评论 -
66.加一(简单)
解题思路:字符串拼接后转换为整数,对整数进行加1,再将得到的结果转换为字符串,遍历之后转为整数存入列表中。(用时44ms,内存13.7 MB)def plusOne(digits): res = '' for i in range(len(digits)): res = res + str(digits[i]) mid = str(int(res...原创 2019-11-26 17:21:45 · 266 阅读 · 0 评论 -
58.最后一个单词的长度(简单)
解题思路:使用库函数,先将首尾空白字符串用strip()去掉,再用split()按照空格分开,形成一个列表,返回最后一个元素的长度。def lengthOfLastWord(s): if s.strip() == '': return 0 lists = s.strip().split(' ') return len(lists[-1])...原创 2019-11-25 18:37:54 · 114 阅读 · 0 评论 -
53.最大子序和(简单)
解题思路:(动态规划)定义两个变量来表示当前子序和和最大子序和:temp、maxsum。若temp大于0则说明该子序和对下一子序有增益作用,则更新当前子序和temp,若temp小于等于0,则说明当前子序和于下一子序有负作用,最长子序列长度到此为止,更新子序,以该元素为起点继续找最大子序。更新最大子序列和。def maxSubArray(nums): temp = nums[0] ...原创 2019-11-25 17:07:23 · 132 阅读 · 0 评论 -
38.报数(简单)
解题思路:先列出n = 1时的情况,返回‘1’,从1往后开始循环。先设置下一结果result为空字符串,字符出现数量count为1。开始循环读取上一字符串的内容。每个字符串都与下一字符串进行比较,若与下一字符串相同则count+1,若不相同则将结果加入result中,并且count重置为1,为了解决越界问题,将最后一个字符串单独判断。(就算遇见最后一个字符串与上一字符串相同的情况也可以解决问题...原创 2019-11-21 18:58:15 · 157 阅读 · 0 评论 -
35.搜索插入位置(简单)
解题思路:使用二分法:先预判size为0的数组和最后一位比target小的数组然后使用二分法遍历查找def searchInsert(self, nums: List[int], target: int) -> int: if size == 0: return 0 if nums[-1] < target: return si...原创 2019-11-20 18:38:17 · 127 阅读 · 0 评论 -
28.实现strStr()(简单)
解题思路一:(使用时长36ms)使用python中的string.find()函数,找到子串返回第一个位置的索引号,找不到则返回-1.(有一个类似的函数string.index(),但是index函数找不到会抛出异常)def strStr(haystack, needle): if not needle: return 0 return haystack.fi...原创 2019-11-20 14:38:43 · 126 阅读 · 0 评论 -
27.移除元素(简单)
解题思路:与26题类似,使用双指针法。使用i记录数组中遍历的索引号,使用k记录除了val值之外的新的元素索引号。def removeElement(nums, val): k = 0 for i in range(len(nums)): if nums[i] != val: nums[k] = nums[i] k...原创 2019-11-18 11:18:11 · 123 阅读 · 0 评论 -
26.删除排序数组中的重复元素
解题思路一:使用while判断i是否在新的数组的长度之内。若第i个元素与它后面的元素中有重复的则删除第i项,再次判断i是否在新的数组长度之内,若第i个元素不与后面列表中的元素重复,则i+1进行下一位判断。循环直至i不在最后的数组的长度内。(缺点:反复判断循环占用内存和时间都大)def removeDuplicates(nums): i = 0 while i < len...原创 2019-11-14 17:57:13 · 108 阅读 · 0 评论 -
21.合并两个有序列表(简单)
解题思路:新建一个链表,head为表头指针。当两个链表非空时,若l1的值小于l2中的值则将l1中的值写入当前p链表的指针中,否则写入l2中的值,指针继续向下。最后当有一个链表为空直接将p的最后一个指针指向那个非空的链表。若两个链表里有一个为空则返回非空的那个链表,def mergeTwoLists(l1, l2): p = ListNode(-1) head = p while l1...原创 2019-11-13 20:40:08 · 187 阅读 · 0 评论 -
20.有效的括号(简单)
解题思路:使用栈后入先出的原理,从左向右读取字符串,若遇到左括号就将左括号放入栈中,若遇到右括号则与它前一个的字符相比较,若能够与字典中的右括号对应上就继续执行(使用pop()函数将前一个左括号pop出)若对应不上则返回False。最后栈中应该只剩下“?”才是完全对应的。注意:return False和return True不能使用return"false/ture"(最后结果会返回true...原创 2019-11-13 11:45:16 · 138 阅读 · 0 评论 -
leetcode:14. 最长公共前缀(简单)
解题思路:找出最短的字符串长度,然后将最短的字符串分别与其他字符串进行比较,若最短字符串与该字符串与最短字符串长度相同的段相同则继续判断下一个,若不相同则将最短字符串减去一个字符,循环到最后直到找到最大相同字符串为止。def longestCommonPrefix(self, strs: List[str]) -> str: if len(strs) == 0: ...原创 2019-11-11 21:09:51 · 122 阅读 · 0 评论 -
力扣13罗马数字转整数(简单)python3
解题思路:判断所有的’I’、‘X’、‘C’的左边字符是否为特殊规则,若为特殊规则则减去罗马字符相对应的数字,若为正常规则则加上该罗马字符对应的数字。```pythonclass Solution: def romanToInt(self, s: str) -> int: &...原创 2019-11-07 17:18:25 · 459 阅读 · 0 评论 -
力扣 9. 回文数
题目来源:力扣 https://leetcode-cn.com/problemset/all/class Solution: def isPalindrome(x): ''' #使用字符串翻转 x = str(x) if x[::-1] == x: return True else:...原创 2019-09-03 13:44:45 · 234 阅读 · 0 评论 -
力扣 8.字符串转换整数
题目来源:力扣 https://leetcode-cn.com/problemset/all/class Solution: def myAtoi(self, str: str) -> int: #去掉左边空字符 str=str.lstrip() #如果字符串为空,返回0 if len(str)==0: ...原创 2019-09-03 13:22:47 · 278 阅读 · 0 评论 -
力扣 4. 寻找两个有序数组的中位数
题目来源:力扣 https://leetcode-cn.com/problemset/all/要求时间复杂度为 O(log(m + n)),下面的方法没有达到,sort()函数本质为快排其时间复杂度为:O(NlogN),一般复杂度为log的要用到二分class Solution: def findMedianSortedArrays(self, nums1: List[int], n...原创 2019-09-03 12:05:09 · 355 阅读 · 0 评论 -
力扣 1. 两数之和
题目来源:力扣 https://leetcode-cn.com/problemset/all/ class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: ''' 方法一:暴力遍历(时间复杂度o(n^2)...原创 2019-09-03 11:55:11 · 181 阅读 · 0 评论 -
力扣6. Z字形变换
题目来源:力扣https://leetcode-cn.com/problemset/all/class Solution: def convert(s, numRows): if numRows < 2: #若行数小于2则直接返回字符串 return s res = ["" for _ in range(...原创 2019-09-03 11:30:15 · 204 阅读 · 0 评论 -
力扣7. 整数反转
题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-integer著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。def reverse(x): a = [] s = str(x)#数字转换为字符串 st = '' #判断若为一位数则直...原创 2019-09-02 18:19:20 · 195 阅读 · 0 评论
分享