![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
math_computer
一个热爱数学和雨点的嗯,还没想好是什么
展开
-
写个活动选择问题吧~
选出最大不冲突的活动列表 def activity_selection(s, f): m = [0] tmp = f[0] for i in range(1, len(f)): next_ = s[i] if next_ >= tmp: m.append(i) tmp = f[i] if i < len(f) - 1: next_ = s[i + 1]原创 2020-07-12 15:02:28 · 96 阅读 · 0 评论 -
每日一练7.12——将数字转换为字符串
将数字转换为字符串 # 递归解法 class Solution: def translateNum(self, num: int) -> int: def trans(num): if len(num) <= 1: return 1 count = 0 count += trans(num[1:]) if num[0]原创 2020-07-12 15:00:31 · 204 阅读 · 0 评论 -
每日一练7.11——逆序数
计算数组中的逆序数 class Solution: def reversePairs(self, nums: List[int]) -> int: n = len(nums) if n <= 1: return 0 def merge_sort(nums, count): if len(nums) <= 1: return nums, count原创 2020-07-12 15:01:38 · 207 阅读 · 0 评论 -
写个最长回文子串吧~
def longest_palindrome(s): if not s: return "" def check_palindrome(t): for i in range(0, len(t) // 2 + len(t) % 2): if t[i] != t[-1 * i - 1]: return False return True value = [1 for i in ra.原创 2020-07-12 15:02:12 · 108 阅读 · 0 评论 -
写个最长公共子序列(子串)吧~
def longest_common_subseq(str1, str2): value = [[0 for j in range(len(str2) + 1)] for i in range(len(str1) + 1)] for i in range(1, len(str1) + 1): for j in range(1, len(str2) + 1): if str1[i - 1] == str2[j - 1]:原创 2020-07-12 15:05:29 · 99 阅读 · 0 评论 -
写个最大子序和吧~
连续子序列和最大 def max_sub_array(nums): tmp, next_ = nums[0], nums[0] max_value = nums[0] for i in range(1, len(nums)): next_ = tmp + nums[i] if tmp > 0 else nums[i] if max_value < next_: max_value = next_ tm原创 2020-07-12 15:02:43 · 79 阅读 · 0 评论 -
写个汉诺塔吧~
def hano(A, B, F, n): if n == 1: move(A, B, n) else: hano(A, F, B, n - 1) move(A, B, n) hano(F, B, A, n - 1) def move(A, B, m): print(f"move {m} from {A} to {B}") # 测试通过 hano("A", "B", "F", n=4) # 1,2,3,4四个圆原创 2020-07-12 15:05:41 · 112 阅读 · 0 评论 -
写个连通域吧~
def connected_regions_areas(mat): if not mat: return [], [] regions = [] areas = [] m, n = len(mat), len(mat[0]) label_table = [[0 for j in range(n)] for i in range(m)] label = 1 d = [(-1, 0), (1, 0), (0, -1), (0, 1),原创 2020-07-12 15:02:55 · 92 阅读 · 0 评论 -
写个最长无重复子串吧~
def length_of_longest_substring(st): max_length = 0 max_substring = "" if not st: return 0, "" i, j = 0, 0 while j < len(st): if st[j] not in st[i:j]: j += 1 if j == len(st): if原创 2020-07-12 15:03:04 · 63 阅读 · 0 评论 -
写个旋转矩阵吧~
def rot(a): n = len(a) if n <= 1: return a for i in range(n // 2): for j in range(i, n - i - 1): tmp = a[i][j] a[i][j] = a[n - 1 - j][i] a[n - 1 - j][i] = a[n - 1 - i][n - 1 - j]原创 2020-07-12 15:03:13 · 131 阅读 · 0 评论 -
写个最小编辑距离吧~
def recursive_edit_distance(str1, str2, cost): if not str1: return len(str2) * cost["add"] if not str2: return len(str1) * cost["delete"] if str1[-1] == str2[-1]: return recursive_edit_distance(str1[:-1], str2[:-1], cost原创 2020-07-04 15:48:14 · 125 阅读 · 0 评论 -
写个堆排序吧~
def tune_heap(arr, heapsize, root): left = 2 * root + 1 right = left + 1 larger = root if left < heapsize and arr[larger] < arr[left]: larger = left if right < heapsize and arr[larger] < arr[right]: larger =原创 2020-07-12 15:05:03 · 91 阅读 · 0 评论 -
写个快速排序吧~
def quick_sort(arr): if not arr or len(arr) == 1: return arr k, new_arr = partition(arr) return quick_sort(new_arr[:k]) + [new_arr[k]] + quick_sort(new_arr[k + 1 :]) # 保证子序列一定严格小于原序列 def partition(arr): tmp = arr[-1] i, j = 0, 0 while j <原创 2020-07-12 15:04:54 · 88 阅读 · 0 评论 -
写个归并排序吧~
def merge(p, q): res = [] i, j = 0, 0 while i < len(p) and j < len(q): if p[i] <= q[j]: res.append(p[i]) i += 1 else: res.append(q[j]) j += 1 return res + p[i:] + q[j:] arr1 = [] arr2 = [2] arr3 = [2, 1] arr4 = [10, 9, 8, 11,原创 2020-07-12 15:04:35 · 77 阅读 · 0 评论 -
写个插入排序吧~
def insert_sort(arr): # 检查边界情况没问题 j = 1 while j < len(arr): tmp = arr[j] # 临时保存 i = j - 1 while i >= 0 and arr[i] > tmp: arr[i + 1] = arr[i] # 移动 i -= 1 arr[i + 1] = tmp # 插入 j += 1 arr1 = [] arr2 = [2] arr3 = [2, 1] arr4原创 2020-07-12 15:04:45 · 63 阅读 · 0 评论 -
写个二分查找吧~
def bi_search(arr, t): if not arr or t < arr[0] or t > arr[-1]: # 边界情形 return None begin, end = 0, len(arr) - 1 while begin <= end: mid = begin + (end - begin) // 2 # 防止大数相加溢出 if t == arr[mid]: return mid elif t < arr[mid]: e原创 2020-07-12 15:03:31 · 73 阅读 · 0 评论 -
对于二分查找的思考
文章目录问题问题的形式化涉及的基本概念基本概念的代码化验证左二分点vs右二分点左右指针框架 我的思考,是指将抽象和具象进行平衡,然后留存在心中。在这个过程中,最为重要的特性是清晰。 由于我对python3相对比较熟悉,所以编程语言采用python3. 问题 问题:给定一个非空浮点数升序列表,和一个浮点数,如果这个浮点数在列表中,则返回最小索引,否则返回-1 问题的形式化 问题的形式化描述: 输入:非空浮点数升序列表alist,浮点数num 输出:索引index 涉及的基本概念 不管是使用迭代的写法还是使用递原创 2020-05-23 20:09:42 · 261 阅读 · 0 评论