![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
小象算法
文章平均质量分 69
Josvin
这个作者很懒,什么都没留下…
展开
-
【小象算法】第四讲:分治和归并
预备知识归并两个已排序数组已知两个已排序数组,将这两个数组合并为一个排序数组。package com.wenhui.lession4;import java.util.Arrays;/** * @ClassName Test * @Description :TODO * @Author Josvin * @Date 2021/02/11/18:14 */public class Test { public static void merge_sort_two_array(原创 2021-02-11 18:34:01 · 149 阅读 · 2 评论 -
【回溯算法】leetcode51.N皇后
题目描述(传送门)n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的解法。示原创 2021-02-11 00:45:35 · 913 阅读 · 1 评论 -
【回溯算法】leetcode22.括号生成
题目描述(传送门)数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]思考递归生成所有可能package com.wenhui.lession4;import java.util.LinkedList;import java.util.List;import jav原创 2021-02-10 21:43:39 · 126 阅读 · 2 评论 -
【回溯算法+Set+剪枝】leetcode40.组合总和II (Java超时了)
题目描述(传送门)给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]原创 2021-02-09 00:07:22 · 264 阅读 · 0 评论 -
【回溯算法】leetcode90.子集II
题目描述(传送门)给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]思考这道题与之前子集不同的是有了重复元素。算法思路解题思路&代码解析【回溯算法】leetcode78.子集我们只需要对昨天代码做两部改进:对原始数组进行排序对子集借助Set去重【小象算法Java版】第原创 2021-02-07 22:55:47 · 199 阅读 · 1 评论 -
【回溯算法】leetcode78.子集
题目描述(传送门)给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]回溯法回溯法又称为试探法,但当探索到某一步时,发现原先选择达不到目标,就退回一步重新选择,这种走不通就退回再走的算法就叫做回溯法。原创 2021-02-06 21:50:54 · 205 阅读 · 0 评论 -
【贪心算法】poj 2431: Expedition(最优加油方法)
题目描述(传送门)DescriptionA group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock and puncture the truck’s fuel tank. The truck now leaks one unit of fuel原创 2021-02-05 20:48:32 · 348 阅读 · 1 评论 -
【贪心算法】leetcode452.用最少数量的箭引爆气球
题目描述(传送门)在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全原创 2021-02-05 17:36:15 · 414 阅读 · 4 评论 -
【贪心算法】leetcode45. 跳跃游戏II
题目描述(传送门)给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。解题思路&代码实现思考从第0位置,最少需要跳几次达到最后一个位置?如果希望最少跳跃达到终点,则需要明确何时进行跳跃是最合原创 2021-02-04 22:39:02 · 1188 阅读 · 1 评论 -
【贪心算法】leetcode55. 跳跃游戏
题目描述(传送门)给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可原创 2021-02-04 21:26:23 · 317 阅读 · 4 评论 -
【贪心算法】leetcode402.移掉K位数字
题目描述(传送门)给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = "10200", k = 1输出: "200"解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有原创 2021-02-03 23:22:34 · 959 阅读 · 2 评论 -
【贪心算法】leetcode376.摆动序列
题目描述(传送门)如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(原创 2021-02-03 20:13:22 · 230 阅读 · 0 评论 -
【小象算法Java版】第三章:贪心算法
贪心算法问题引入(钞票支付问题)贪心算法贪心思路贪心前提与动态规划的区别问题引入(钞票支付问题)有1元、2元、5元、10元、20元、50元、100元的钞票无穷多张。现使用这些钞票支付X元,最少需要多少张???例如:X = 628元最佳支付方案为:6张100元,1张20元,1张5元,1张2元,1张1元的;共需:6+1+1+1+1 = 10张。直觉告诉我们:尽可能多的使用面值较大的钞票!贪心法:遵循某种规律,不断贪心的选取当前最优策略的算法设计方法。为何这样做一定是对的呢??面额为1元、2元原创 2021-02-03 16:41:18 · 215 阅读 · 0 评论 -
【每日一题】leetcode295.数据流中的中位数(大小堆实现)
题目描述(传送门)中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum(3) f原创 2021-02-03 14:10:58 · 191 阅读 · 1 评论 -
【每日一题】poj 1363: Rails(合法出栈顺序)
题目描述(传送门)There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, it tu原创 2021-02-02 18:11:01 · 1169 阅读 · 2 评论 -
【小象算法Java版】第二节:栈和队列
预备知识https://docs.oracle.com/javase/8/docs/api/查看API,看看Stack的一些方法:Queue 方法:leetcode 225.用队列实现栈题目描述使用队列实现栈的下列操作:(传送门)push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和原创 2021-02-02 17:09:25 · 191 阅读 · 1 评论 -
【小象算法Java版】第一节:链表(下)
文章目录leetcode 86.分隔链表题目描述解题思路&代码实现leetcode138.复制带随机指针的链表题目描述解题思路&代码实现leetcode21.合并两个有序链表题目描述解题思路&代码实现leetcode23.合并K个升序链表题目描述解题思路&代码实现leetcode 86.分隔链表题目描述给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。(传送门)原创 2021-01-23 21:15:32 · 225 阅读 · 0 评论 -
【小象算法Java版】第一节:链表(上)
leetcode203. 移除链表元素题目描述删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5解题思路方法:哨兵节点(在这里我先不使用傀儡节点,使用傀儡节点问题也就简单了)首先这个要删除的节点位置有几种情况:prev代表前驱节点:cur = head;cur代表当前节点:cur = head.next;情况一:要删除的节点在链表原创 2020-12-25 16:27:22 · 222 阅读 · 1 评论