算法题
文章平均质量分 54
childhoodEnd
前抖音程序猿
展开
-
【Leetcode 876】【Leetcode 19】【GO】链表专题
【Leetcode 876, 19】链表题型解析原创 2023-03-12 13:50:34 · 152 阅读 · 0 评论 -
【Leetcode 189】轮转数组
Leetcode 189 轮转数组解题思路原创 2023-03-12 13:16:29 · 128 阅读 · 0 评论 -
【LeetCode 704】【Go】二分查找
Leetcode 二分算法(一)原创 2023-02-25 13:01:38 · 590 阅读 · 0 评论 -
算法框架小结
一. 动态规划思路:明确 状态:找出原问题和子问题中变化的值是哪个定义 dp 数组 / 函数 的含义:明确 dp 数组最后要求的值明确 选择并择优:明确前后状态的变化明确基本状态:就是要初始化的数组值例子:凑零钱问题最少的硬币数价格 n 时的硬币数在之前相隔硬币价值的 dp 元素中取最小值 加一刚好求到价格 n 为 0 时返回 0,n 小于 0 时返回 -1 , 并一直返回 -1二. 回溯算法思路:路径:已经做出的选择选择列表:可以做出的选择结束条件:到达决策树底层,原创 2020-07-30 14:21:19 · 605 阅读 · 1 评论 -
【Java】Leetcode 回溯算法小结
回溯算法的关键在于递归,并在一个递归结束后去掉传入的数据Leetcode46 全排列思路:最经典的回溯算法。使用双重循环,交换后递归至下一层,递归完后交换回来,层数取决于外层循环(i+1)代码:class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> result = new LinkedList();原创 2020-07-04 16:46:51 · 164 阅读 · 0 评论 -
Leetcode 二分查找题小结 Java
二分查找主要用于在范围内搜索指定值较循环遍历速度快,但还是循环遍历实现简单Leetcode33 搜索旋转排序数组思路: 经典二分查找,首先通过二分查找到旋转中值,然后根据左右值判断在哪半边数组,在进行搜索。代码:class Solution { public int search(int[] nums, int target) { int len = nums.length; if(len==0) return -1; if(nums[0]原创 2020-07-03 15:53:49 · 140 阅读 · 0 评论 -
LeetCode 动态规划题总结
64 最小路径和思路: dp 数组为二维数组,长度取决于提供数组 数组需初始化横起始轴的值和竖起始轴的值,中间的值取决于上,左的值。 关键在于了解本值与上,左值的关系代码class Solution { public int minPathSum(int[][] grid) { if(grid.length==0||grid[0].length==0){ return 0; } int m = grid.length原创 2020-06-29 16:24:59 · 100 阅读 · 0 评论 -
【网易笔试题-Java】乘积 - 数组积为目标值
题目:小易给定你一个长度为\mathit nn的正整数序列A_{i}A i ,你每次可以使用\text 11的代价将某个数加一或者减一,你希望用最少的代价使得所有数的乘积等于\mathit BB,求最小代价(操作结束后每个数也必须是正整数)。思路: 依旧是动态规划,这个比较复杂。 目标是求得最小值,思想是遍历所有两数相乘可以得到目标值的情况,不断比较得到最小值。 返回目标值,将最小值赋值给它并返回。 动态数组初始化第一行和第一列 第一行是一个数字的情况下,需要几次操作能变成列对应值 第一列是原创 2020-06-26 11:37:28 · 1238 阅读 · 0 评论 -
【网易笔试题】小易跳柱子
题目:小易有n根柱子,第i根柱子的高度为hi。一开始小易站在第一根柱子上。小易能从第i根柱子跳到第j根柱子,当且仅当hj<=hi且k其中为指定的一个数字。另外小易拥有一次释放超能力的机会。这个超能力能让小易从柱子i跳到任意满足小于等于k的柱子而无视柱子高度的限制。现在小易想知道,小易是否能到达第n根柱子。输入描述:第一行数据组数对于每组数据,第一行数字,接下来一行个数字表示.输入例子1:15 36 2 4 3 8输出例子1:YES思路:参考自 AFUWUS,稍作修改 。核原创 2020-06-26 10:13:13 · 899 阅读 · 0 评论 -
按位或 网易校招题
题目: 小易有一个初始为空的数字集合,支持两种操作: 1、加入数字x到集合中。2、询问集合中是否存在一个子集,满足子集中所有数字的Or值恰好为k。 Or为二进制按位或操作,C++中表示为"|"。 小易希望你能解决这个问题。思路: 使用 HashSet 记录值,防止重复(使用 add 方法添加) 在目标子集中的数字的二进制模式下,1的位数必定是小于等于目标值的。 所以,遍历集合,找到和目标值 与操作下仍是原值的数字,将它按位或到暂存值。 只要遍历到暂存值等于目标值,就说明存在该子集。(还有原创 2020-06-24 10:16:28 · 339 阅读 · 0 评论 -
放置货物 网易面试题
网易校招题题目: 小易有一个体积巨大的货物,具体来说,是个在二维平面上占地的货物。小易有一个的广场,想把货物放在这个广场上。不幸的是,广场上已经有了一些障碍物,障碍物所在的格子不能放置你的货物。小易现在想知道能否成功地放置货物。思路: 二维数组,从第1排开始属于广场范围,若存在障碍物,该数组位的值置为1. 再在广场范围内遍历,将数组值变成本身和上下值相加减对角值。遍历出障碍物数,方便最后的判断。 最后一遍遍历,以遍历到的点为基点,判断向前延伸货物体积后的对角点的值,和后面一排包围的三点值的计算原创 2020-06-24 09:54:18 · 424 阅读 · 0 评论