![](https://img-blog.csdnimg.cn/20200407140359404.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
面试中经常碰到的算法题
阿丘的博客
博观而约取,厚积而薄发。
展开
-
【每天一道算法题12】用栈实现队列
题目描述用两个栈实现一个队列。并实现队列的在尾部添加元素方法和删除头部方法。分析使用两个栈,一个用于添加元素,一个用于删除元素class CQueue { private Stack<Integer> stack1; # 用于添加元素 private Stack<Integer> stack2; # 用于删除元素 public CQueue() { stack1 = new Stack<>();原创 2020-06-30 10:16:55 · 254 阅读 · 0 评论 -
【每天一道算法题11】合并区间
题目描述给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间解法:先排序后合并class Solution: def merge(self, intervals: Li原创 2020-06-29 16:46:12 · 272 阅读 · 0 评论 -
【Python】【二叉树】判断两个二叉树是否相同
题目描述相同二叉树的定义:给定两个二叉树,如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。编写一个函数来判断两个二叉树是否相同,相同返回True否则返回False。解法一:使用递归求解# 树的节点类class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef isSameTree(p: TreeNode,原创 2020-05-21 10:40:29 · 1259 阅读 · 0 评论 -
【Python】二叉树的广度优先搜索和深度优先搜索
文章目录1. 什么是二叉树2. 本文用到的二叉树例子3. 什么是广度优先搜索(BFS)4. 什么是深度优先搜索(DFS)5. 使用队列实现BFS6. 使用栈实现DFS7. 使用递归实现DFS1. 什么是二叉树二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。2. 本文用到的二叉树例子 1 / \ 2 3 / \ / \4原创 2020-05-19 20:39:09 · 1080 阅读 · 0 评论 -
【每天一道算法题10】移动0元素到末尾
题目描述给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]要求:只能在原有数组上进行操作,不能新建额外的数组。分析这一题的难点有两个:1.结果要保持非0元素的相对顺序2.不能新建额外的数组解法一:快慢指针def solution(nums): n = len(nums) # 定义慢指针初始索引 slow_index = 0 for i in原创 2020-05-14 21:47:26 · 474 阅读 · 0 评论 -
【每天一道算法题9】【Python】找零钱问题
题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例:coins = [1, 2, 5]amount = 100返回 20coins = [1, 2, 5]amount = 103返回 22解法一:动态规划(自底向上)分析:假设 coins = [coi...原创 2020-04-22 12:10:41 · 3324 阅读 · 1 评论 -
【每天一道算法题8】【Python】求二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。示例:给定二叉树: 5 / \ 2 26 / / \35 4 1返回它的最大深度 3 。节点类:class TreeNode: def __init__(val): self.val = val ...原创 2020-04-20 11:58:54 · 757 阅读 · 0 评论 -
【每天一道算法题7】【Python】合并两个有序链表
题目描述将两个升序链表ListNode1、ListNode2合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。节点类:class ListNode: def __init__(self, x): self.val = x self.next = None示例:输入:1->2->4, 1->3->...原创 2020-04-19 16:24:45 · 405 阅读 · 0 评论 -
【每天一道算法题6】【Python】求数组第k个最大元素
题目描述在未排序的数组中找到第 k 个最大的元素,示例 :输入: nums = [3, 2, 1, 5, 5, 6, 4] 和 k = 3输出: 5解法一:先排序后取值常规做法是先对数组nums从大到小排序,然后取nums[k-1]就行。排序算法可以选择快速排序,或者使用Python内置函数sorted(),此解法较简单,就不赘述了。时间复杂度是O(NlogN),N是nums长度。...原创 2020-04-12 23:08:32 · 835 阅读 · 0 评论 -
【每天一道算法题5】【Python】买卖股票的最佳时机
题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2020-04-11 20:35:00 · 606 阅读 · 0 评论 -
【每天一道算法题4】【Python】复原ip地址
题目描述给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]前不久在在线面试腾讯时碰到过这题,10分钟解题时间,当时一时紧张没写出来,只知道这个题目要用用到回溯算法,回来仔细想了2个解法。解法一:回溯算法分析:ip地址格式规则:包含4部分,如 ...原创 2020-04-10 17:24:59 · 785 阅读 · 0 评论 -
【每天一道算法题3】【Python】分割数组为连续子序列
题目描述输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数。返回你是否能做出这样的分割?示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 33, 4, 5示例 2:输入: [1,2,3,3,4,4,5,5]输出: True解释:你可以分割出这样两个...原创 2020-04-09 21:17:44 · 1131 阅读 · 0 评论 -
【每天一道算法题2】【Python】全排列
题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解法一:递归 + 回溯def permutations(li: list) -> list: # 定义一个列表,用来存储每一次回溯完成时生成的排列 result ...原创 2020-04-08 18:28:29 · 547 阅读 · 0 评论 -
【每天一道算法题1】【Python】杨辉三角
题目描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。如下图:示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]解法一:递归法(优化前)# 使用递归计算第i行,第i列的元素def f(i, j): if j == 1 or j ==...原创 2020-04-07 20:27:11 · 914 阅读 · 0 评论 -
【学习笔记】【算法一】递归
1. 什么是递归?它是如何工作的?递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。简单的来说就是:在自己的函数体中调用自己。递归,需要有‘递’进关系和‘归’的条件。举一个简单的例子:求阶乘 n!# python3# 递归写法def factorial(n): if n == 1: # '归'的条件 return n ret...原创 2020-04-07 17:35:31 · 357 阅读 · 0 评论