402. 移掉K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。链接:https://leetcode-cn.com/problems/remove-k-digits /*贪心思想:如果要剩下的数字最小,那么数字从左开始的每一位都要尽可能地小,因此我们要从剩余数字的高位开始,在有效范围内找到最小的数字。 有效范围就是要除了这个范围剩下的数字的数目是最后...
题目链接:https://leetcode-cn.com/problems/game-of-life/ 题目描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰何顿康威在1970年发明的细胞自动机。 给定一个包含 m n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于...
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。 返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。 示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2输出:[7,4,1]解释: 所求结点为与目标结点(值为 5)距离为 2 的结点, 值分别为 7,4,以及 1注意,输入的 "root" 和 "target" 实际上是树上的结点。 上面的输入仅仅是对这些对象进行了...
134. 加油站 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。链接:https://leetcode-cn.com/problems/gas-station /* 贪心算法: 首先要知道两个问题: 1.当总的耗油量小于总的加油量的时...
Task:思路与代码: 有了递归的思想之后这样的题目看起来还是蛮简单的,就是自己调用自己,给定一个节点, (1)如果节点为空,那就直接返回0; (2)否则(这个节点不是空的),那就用max函数找这个节点的最大深度(左孩子的深度和右孩子的深度中取最大的) (3)然后max里面又调用了函数本身,这就是递归,意思就是对于刚刚那个节点的左孩子和右孩子也是一样的,比如左孩子,那我们又以左孩子为当前节点,重复上面(1)和(2)的过...
题目描述: 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 说明: 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。 原题地址:https://leetcode-cn.com/problems/triangle/submissions/ 题目思路: 这道题可以用递归...
用Python语言实现算法 写这篇博客用于记录解题中的成长。 #961. 在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次 返回重复了 N 次的那个元素。(Type: easy) 例1输入: [1,2,3,3] 输出: 3例2:输入:[2,1,2,5,3,2] 输出:2例3输入: [5,1,5,2,5,3,5,4] 输出:5#-*-coding:utf-8-*- class Solution:def duplicate(self,A):#预先判断列表的值不为空或者只有一个元素if len(A) <= 1:return Falsel = []for i in...
BFS1. 计算在网格中从原点到特定点的最短路径长度 2. 组成整数的最小平方数数量 3. 最短单词路径 DFS1. 查找最大的连通面积 2. 矩阵中的连通分量数目 3. 好友关系的连通分量数目 4. 填充封闭区域 5. 能到达的太平洋和大西洋的区域Backtracking1. 数字键盘组合 2. IP 地址划分 3. 在矩阵中寻找字符串 4. 输出二叉树中所有从根到叶子的路径 5. 排列 6. 含有相同元素求排列 7. 组合 8. 组合求和 9. 含有相同元素的组合求和 10. 1-9 数...
斐波那契数列1. 爬楼梯 2. 强盗抢劫 3. 强盗在环形街区抢劫 4. 信件错排 5. 母牛生产 矩阵路径1. 矩阵的最小路径和 2. 矩阵的总路径数数组区间1. 数组区间和 2. 数组中等差递增子区间的个数分割整数1. 分割整数的最大乘积 2. 按平方数来分割整数 3. 分割整数构成字母字符串最长递增子序列1. 最长递增子序列 2. 一组整数对能够构成的最长链 3. 最长摆动子序列最长公共子序列 0-1 背包1. 划分数组为和相等的两部分 2. 改变一组数的正...
素数分解整除 最大公约数最小公倍数1. 生成素数序列 2. 最大公约数 3. 使用位操作和减法求解最大公约数进制转换1. 7 进制 2. 16 进制 3. 26 进制阶乘1. 统计阶乘尾部有多少个 0字符串加法减法1. 二进制加法 2. 字符串加法相遇问题1. 改变数组元素使所有的数组元素都相等多数投票问题1. 数组中出现次数多于 n / 2 的元素其它1. 平方数 2. 3 的 n 次方 3. 乘积数组 4. 找出数组中的乘积最大的三个数素数分解 每一个数都可以分解成素数...
快速选择堆1. Kth Element桶排序1. 出现频率最多的 k 个元素 2. 按照字符出现次数对字符串排序荷兰国旗问题1. 按颜色进行排序快速选择 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。 堆 用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素。最小堆需要使...
1. 分配饼干2. 不重叠的区间个数 3. 投飞镖刺破气球 4. 根据身高和序号重组队列 5. 买卖股票最大的收益 6. 买卖股票的最大收益 II 7. 种植花朵 8. 判断是否为子序列 9. 修改一个数成为非递减数组 10. 子数组最大的和 11. 分隔字符串使同种字符出现在一起保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。 1. 分配饼干 455. Assign Cookies (Easy)Input: [1,2], [1,2,3] Output: 2Explanation: You have 2 children an...
解题思路: 使用递归的方法,递归比较左右子树深度,返回较大的值 + 1。/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int maxDepth(TreeNode* root) {if(!root) return 0;else return max(maxDepth(root->left), maxDepth(root->right)) + 1;} };
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3]Output:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]回溯算法自己的一个思路如下:需要保留数字使用情况,my_nums增加和删除元素等操作 1 class Solution:2 def permute(self, nums: List[int]) -> List[List[int]]:3 results = []4 use_dict = dict.fromkeys(nums, False) #初始化一...
TWO POINTER 快指针速度2 , 慢指针速度1 相对速度1,有环必然相遇public class Solution {public boolean hasCycle(ListNode head) {ListNode fast = head,slow = head;while(fast!=null && fast.next!=null){slow = slow.next;fast = fast.next.next;if(slow == fast){return true;}}return false;} }