力扣_初级算法
力扣网初级算法专栏
xiaozhi_小志
Stay Hungry! Stay Foolish!
求知若饥 虚心若愚
展开
-
实现strStr()
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。 class Solution: def strStr(self, haystack: str, needle: str) -> int: if not needle: return 0 left = 0 right = len(needle原创 2021-05-19 11:00:48 · 135 阅读 · 0 评论 -
验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 解题思路: 让字符串字符都变成小写,只保留数字和字母,然后翻转比较。 代码实现: class Solution: def isPalindrome(self, s: str) -> bool: s = ''.join(filter(str.isalnum, s.lower())) return s == s[::-1] ...原创 2021-05-19 10:20:29 · 136 阅读 · 0 评论 -
种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。 解题思路: 从示例中可以看出,当列表中存在三个连续为0的元素时,说明可以种一棵树;而还有一种情况是[0,0,1],[1,0,0]这种形式,也可以种植一棵树,但是原创 2021-05-18 17:57:53 · 204 阅读 · 0 评论 -
两数之和
给定一个整数数组nums和一个整数目标值target,在该数组中找出和为目标值的那两个整数,并返回它们的数组下标 可以假设每种输入只会对应一个答案。但是数组中同一个元素不能使用两遍。 可以按任意顺序返回答案。 class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1,原创 2021-02-26 09:48:27 · 129 阅读 · 0 评论 -
移动零
要求 给定一个数组nums,编写一个函数将所有的0移动到数组的末尾,同时保持非零元素的相对顺序。 class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ a = 0 b = 0 while a < l原创 2021-02-25 17:21:46 · 132 阅读 · 0 评论 -
加一
要求: 给定一个由整数组成的非空数组所表示的非负整数,在该书的基础上加一。 最高位数字存放在数组的首位,数组中每个元素只存储单个数字。 可以假设除了整数0之外,这个整数不会以零开头。 class Solution: def plusOne(self, digits: List[int]) -> List[int]: if digits[-1] < 9: digits[-1] += 1 return digits原创 2021-02-25 15:31:00 · 150 阅读 · 0 评论 -
只出现一次的数字
代码实现: class Solution: def singleNumber(self, nums: List[int]) -> int: # return 2 * sum(set(nums)) - sum(nums) # 这种方法也是可行的 x = 0 for i in nums: x^=i return x 说明:当数组中只出现一次的数字的个数为奇数时,返回这个数字;当数组中只出现一次的数字为偶数时原创 2020-08-27 18:01:36 · 154 阅读 · 0 评论 -
存在重复数字
可以利用集合这一数据结构的特性来实现,比较列表的长度和将列表转换为集合之后的长度。 class Solution: def containsDuplicate(self, nums: List[int]) -> bool: return not len(nums) == len(set(nums))原创 2020-08-18 17:35:33 · 149 阅读 · 0 评论 -
旋转数组
方案一 直接将列表的两个部分进行拼接,但是其空间复杂度较大,并且需要注意k的取值,当k的值大于列表长度时,需要进行取余处理。 class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ k = k % len(nums) ...原创 2020-08-11 17:33:33 · 192 阅读 · 0 评论 -
买卖股票的最佳时机 II
要求: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 class Solution: def maxProfit(self, prices: List[int]) -> int: result = 0 for day in range(len(prices)-1):原创 2020-08-07 17:01:53 · 147 阅读 · 0 评论 -
删除排序数组中的重复项
删除排序数组中的重复项 class Solution: def removeDuplicates(self, nums: List[int]) -> int: x = 0 y = 1 while y < len(nums): if nums[x] == nums[y]: y = y + 1 else:原创 2020-08-07 15:58:22 · 208 阅读 · 0 评论