剑指offer
qq_32395669
这个作者很懒,什么都没留下…
展开
-
剑指offer学习笔记:53 - II. 0~n-1中缺失的数字
题目解法见到排序数组的题目,应该首先想到二分法,原因有三:1.二分法时间复杂度O(logn)优于直接遍历O(n)2.有的题目你会发现我直接遍历非常简单就可以得到结果,比如该题遍历的过程中判断nums[i]是不是等于i就可以了。但是题目中排序的条件都没有用上,肯定没有get到出题者的意图。3.如果面试中出现这种排序数组,肯定是想考察二分法,如果还用遍历法对于面试肯定是很难堪的。class Solution: def missingNumber(self, nums: List[int])原创 2021-03-21 12:02:33 · 77 阅读 · 0 评论 -
剑指offer学习笔记:39数组中出现次数超过一半的数字
题目解法1排序居中法:通过分析可以得出,将该数组排序,最中间的那个值一定是出次数最多的那个数。分析出这个信息我们就好写代码了,时间复杂度为排序的复杂度O(nlogn),空间复杂度O(1)class Solution: def majorityElement(self, nums: List[int]) -> int: nums.sort() return nums[len(nums)//2]解法2哈希表法:在遍历的过程中统计每个数出现的次数,当该次数超过数原创 2021-03-21 11:53:21 · 100 阅读 · 0 评论 -
剑指offer学习笔记:21.调整数组顺序使奇数位于偶数前面
题目解法1暴力解法正常的思路就是新建两个列表,然后遍历原列表,将奇数和偶数分别放入新的列表中,再将新列表合并即可。该方法遍历一次,时间复杂度为O(n),空间复杂度也为O(n).class Solution: def exchange(self, nums: List[int]) -> List[int]: list_odd = [] list_even = [] for inum in nums: if inum % 2 == 1:原创 2021-03-21 11:21:59 · 89 阅读 · 0 评论 -
剑指offer学习笔记:11.旋转数组的最小数字
题目解法:二分法class Solution: def minArray(self, numbers: List[int]) -> int: for i in range(len(numbers)): left = 0 right = len(numbers)-1 while left < right: mid = (left + right) // 2原创 2021-03-19 21:04:40 · 50 阅读 · 0 评论 -
剑指offer学习笔记:03数组中的重复数字
题目解法1:使用哈希表或者set,时间复杂度O(n),空间复杂度O(n)哈希表(字典)class Solution: def findRepeatNumber(self, nums: List[int]) -> int: temp_dict = {} for inum in nums: if inum not in temp_dict: temp_dict[inum] = 1 else: return inum原创 2021-03-19 20:27:10 · 113 阅读 · 0 评论