基本算法
胜天半子_王二_王半仙
胜天半子——王二——王半仙儿是也
展开
-
基础算法 - 分糖果
这也是一个一维数组上面的动态规划问题描述有N个小朋友站在一排,每个小朋友都有一个评分你现在要按以下的规则给孩子们分糖果:每个小朋友至少要分得一颗糖果分数高的小朋友要他比旁边得分低的小朋友分得的糖果多你最少要分发多少颗糖果?示例1输入:[1,2,2]复制返回值:4解题思路仔细分析可以知道, 要找到这个数组中递增和递减的部分, 递增部分每次次加1, 递减部分, 从高到低每次减1但是会出现这种1, 2, 6, 5, 4, 3, 2,1 1, 2, 3, 4, 5, 6, 2,原创 2021-10-28 18:00:46 · 493 阅读 · 0 评论 -
基本算法--拆分词句
拆分词句描述给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“nowcode”;dict=["now", "code"].返回true,因为"nowcode"可以被分割成"now code".我们设定f(n)是以第n个字符串结尾的子字符串是否能够被拆分词句, 可以推导出 f( n ) = f(n - i) && dict.count( s.substr(i,原创 2021-10-27 16:56:54 · 237 阅读 · 0 评论 -
基础算法 - 二叉树的最小深度
思路在于两点只有根节点到“叶子”节点才计算深度怎么区别叶子节点和非叶子节点所以我们通过判断左右子树是不是都为nullptr来判断是否是叶子节点, 通过递归时通过判断左右子节点是否为空进行递归, 从而避免计算非叶子节点的深度/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */#include <climits>class Solution原创 2021-10-25 20:26:43 · 383 阅读 · 0 评论 -
基础算法-二分查找
# coding=utf-8def binary_search(array_s, num, left, right, middle): if right <= left: return False print array_s[middle], if array_s[middle] > num: right = middle middle = (left + right) / 2 return binary_search(array_s, num, left, righ原创 2021-10-11 18:02:35 · 53 阅读 · 0 评论 -
基本算法-冒泡排序
冒泡排序思想就是循环n次, 每次都把大的往后排(每次比较都进行交换), 这样n次下来就是有序的了第一次会把最大的放在最后第二次把第二大的放倒数第二(因为和末尾比较, 没有他大)第三次…第四次…# coding=utf-8def bubble_sort(array_s): # 冒泡排序思想就是 # 循环n次, 每次都把大的往后排, 这样n次下来就是有序的了 temp = 0 for i in range(0, len(array_s)): for j in range(0, le原创 2021-10-11 15:03:15 · 65 阅读 · 0 评论 -
基本算法-选择排序
选择排序时间复杂度:O(n^2)# coding=utf-8def choose_sort(array_s): # 选择排序就是 # 从第一个开始, 找到最小值, 放在第一个 # 然后从第二个开始, 找到最小值放第二个 # 然后从第三个开始, 找到最小值放第三个 for sorted_index in range(0, len(array_s)-1): min_index = -1 min_val = array_s[sorted_index] for i in range原创 2021-10-11 14:53:51 · 50 阅读 · 0 评论 -
基本算法-插入排序
核心思想就是, 从第二个往后 , 每个数值都往前循环, 找到自己的合适的位置# coding=utf-8def bubble_sort(array_s): # 核心思想就是从第二个往后, 每个值都往前找到自己的位置 temp = 0 for i in range(1, len(array_s)): j = i while j > 0: if array_s[j] < array_s[j-1]: temp = array_s[j] array_s[j] =原创 2021-10-11 14:29:33 · 64 阅读 · 0 评论 -
基本算法-归并排序
归并排序, 和另外一道"合并有序链表"的核心代码都差不多采用的分治思想, 分比较容易, 治的时候, 与合并有序列表一样了, 看懂下面这个图即可图解排序算法(四)之归并排序# coding=utf-8def merger_sort(array_s, left, right, temp): if left < right: mid = (left + right) / 2 merger_sort(array_s, left, mid, temp) merger_sort(arra原创 2021-10-11 14:10:38 · 56 阅读 · 0 评论 -
基本算法--快排
这篇文章第一句就写明白了快速排序,说白了就是给基准数据找其正确索引位置的过程.快速排序def qucik_sort(array_s, low, high): if low < high: right_index = get_right_index(array_s, low, high) qucik_sort(array_s, low, right_index-1) qucik_sort(array_s, right_index+1, high)def get_right_原创 2021-10-11 12:36:42 · 60 阅读 · 0 评论