算法学习
东明山庄
只有坚强起来,才能不丧失温柔
展开
-
用循环和智能体两种方法求解八皇后问题
回溯按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法1.1 用循环实现的回溯用了一个数组result来存放解,每次得到一个解,就添加进该列表。该数组没什么好说的。用了另一个数组mylist存放搜索状态,该数组是在递归中是共用的,因为数组是引用传递。需要确保一个搜索过程的搜索状态不受同一层的搜索过程或者...原创 2019-09-07 12:47:16 · 419 阅读 · 0 评论 -
n位二进制中m个1的所有组合个数
用递归和动态规划:将n个元素从左往右排好序。每次选择的m个元素的组合按如下步骤,先选第一个元素,有n-m+1种选择方案第一个元素的位置确定后,其余待选择的m-1个元素从已选择元素的右边选择。这是个与原问题同构的子问题,可以用递归。递归的终止条件有两个,一个是n==m也就是剩余元素数量和剩余位置数量相等,只有一种组合方法;一个是m==0也就是m个元素都已经排完了。用一个全局的数据结构存储...原创 2019-09-29 16:06:38 · 980 阅读 · 0 评论 -
全排列与字典序
题目给定一个字符序列,即字符串,输出字符串中字符的全排列。例如,122的全排列是['122', '212', '221'],123的全排列是['123', '132', '213', '231', '312', '321']。递归法求全排列,思路:对字符串a_b_c有Perm(a_b_c)= a_Perm(b_c)+ b_Perm(a_c)+ c_Perm(a_b),其中加号+表示添加到序...原创 2019-09-10 22:48:04 · 635 阅读 · 0 评论 -
股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可获得的最大利润是多少?例子:例如,一只股票在某些时间节点的价格为[9,11,8,5,7,12,16,14]。如果我们能在价格为5的时候买入并在价格为16时卖出,则能获得最大的利润为11.1.买卖各一次从前往后构建新的序列minB,与价格序列一一对应,元素minB[i]表示在i之前(不包括i)遇到的价格最小值。从后往前...原创 2019-09-10 22:46:37 · 272 阅读 · 0 评论 -
零钱兑换
问题给定不同面额的硬币(coins)和一个总金额(amount) 。写一个函数来计算可以凑成总金额所需的最少的硬币个数,如果没有任何一种硬币组合能满足,返回 -1。示例1输入:coins = [1, 2, 5], amount = 11输出:3 (5+5+1)示例2输入:coins = [2], amount = 3输出:-1 (无法满足)核心在于用动态规划思想,有递归和非递...原创 2019-09-10 13:09:23 · 297 阅读 · 0 评论 -
单链表反转
链表的准备,构建四个节点的单链表,表头是phead:class Node: def __init__(self, val): self.val = val self.next = NonenodeList = [Node(1),Node(2),Node(3),Node(4)]phead = nodeList[0]for i in range(len...原创 2019-09-10 13:07:35 · 174 阅读 · 0 评论 -
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.M*N 的矩阵A,第i(0,1,…)圈 的四个坐标序列分别是A[i][i…N-2-i] 和A[i…M-2-i][N-...原创 2019-09-09 13:01:06 · 174 阅读 · 0 评论 -
几种排序方法
冒泡排序def bubblesort(mylist): mylen = len(mylist) for i in range(mylen-1): for j in range(i+1, mylen): if mylist[i] > mylist[j]: mylist[i], mylist[j] = my...原创 2019-09-07 12:57:38 · 231 阅读 · 0 评论 -
筛选法找质数与迭代器和生成器的应用
用筛法求素数的方法是:用质数筛去 合数: 从第一个素数 2 开始, 把它的倍数去掉; 这样 2 以后的第一个非 0 数就一定也是素数, 把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非 0 数。 把所有非 0 数输出。找到不大于自然数n的素数列表def find_primes(n): myset = [i for i in range(2, n+1)] ...原创 2019-09-07 12:51:24 · 464 阅读 · 0 评论 -
二叉树的遍历与重构
一、首先创建一棵树,用于测试 A / \ B C / / \D E F \ / \ G H Iclass TreeNode: def __init__(self, x): self.val = x self.left = None self.ri...原创 2019-09-07 12:49:03 · 260 阅读 · 0 评论 -
快排中的Partition函数
快排的递归形式快排算法的程序结构:def quicksort(nums, l, r): if l >= r: return k = partition(nums, l, r) quicksort(nums, l, k - 1) quicksort(nums, k + 1, r)其中partition函数输入参数是一个数组nums和两个位...原创 2019-10-01 16:10:05 · 3761 阅读 · 0 评论