Loading...
前言背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?背包算法用二维数组dpi ,表示在面对前i个物品,且背包容量为j时所能获得的最大价值。物品重量价值a13b25c36物品 i \ 背包容量 j0123456a (i = 2)0333333b (i = 2)0358888c (i...
简介归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。一般步骤1. 二分递归法-分治法2. 线性迭代示例代码链表排序,采用二分递归 // 采用归并排序...
核心技能null/nil 异常处理dummy node 哑巴节点快慢指针插入一个节点到排序链表从一个链表中移除一个节点翻转链表合并两个链表找到链表的中间节点哑巴节点适用于头节点可能被删除的场景。下面示例代码是哑巴节点用于删除头节点。 ListNode dummy_node = new ListNode(-1); // head节点为头节点。 dummy_node.next = head; ...
递归分支转向是算法的灵魂,而递归则是允许函数和过程进行自我调用,这是实现分支转向的一种机制。递归的价值在于,许多应用问题都可简洁而准确的描述为递归形式。递归也是一种基本而典型的算法设计模式。这一模式可以对实际问题中反复出现的结构和形式做高度概括,并从本质层面加以描述和刻画,从而导出高效的算法。递归思想可以使我们从宏观理解和把握应用问题的实质深入挖掘和洞悉算法过程的主要矛盾和一般性模式,并最终...
原理选择一个元素作为轴点,使用轴点构造算法对原序列进行改造,使得位于轴点前的元素均不大于轴点,位于轴点后的元素均不小于轴点,再以轴点为界,分别递归地对前后子序列进行快速排序。