数据结构与算法
wangxinRS
目前在研究所做图像算法~
展开
-
常见十大排序算法--python3实现
问题来源:排序数组问题描述:给你一个整数数组 nums,将该数组升序排列。例子:输入:nums = [5,2,3,1]输出:[1,2,3,5]思路:这里没有什么好说的,有十种常见的排序算法。参考自@Sweetiee1. 冒泡排序(O(n2)O(n^2)O(n2),稳定)顾名思义,冒泡排序需要遍历n次,每次遍历都取出剩余元素中的最大值,最大值如同泡沫一样缓缓上升。# 输入a = ...原创 2020-04-02 18:02:05 · 264 阅读 · 0 评论 -
单词压缩编码--Trie树
问题描述:给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进行...原创 2020-03-30 19:33:55 · 249 阅读 · 0 评论 -
地图分析--广度搜索
问题来源:地图分析问题描述:你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个...原创 2020-03-29 23:06:53 · 156 阅读 · 0 评论 -
链表的中间节点--快慢指针
问题来源:链表的中间节点问题描述:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。例子:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val ...原创 2020-03-23 12:07:02 · 286 阅读 · 0 评论 -
二叉树层次遍历--广度遍历和深度遍历
问题来源:二叉树层次遍历问题描述:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例子:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路:可以通过广度遍历和深...原创 2020-03-23 10:42:59 · 740 阅读 · 0 评论 -
对称二叉树--深度遍历与广度遍历
问题来源:对称二叉树问题描述:给定一个二叉树,检查它是否是镜像对称的。比如,下面这个二叉树是镜像对称的;1/ 2 2/ \ / 3 4 4 3而这个二叉树则不是镜像对称的。1/ 2 2\ 3 3例子:输入:[1,2,2,3,4,4,3]输出:True思路:镜像对称意味着左子树与右子树镜像对称,在遍历左子树或者右子树过程中...原创 2020-03-21 19:46:07 · 170 阅读 · 0 评论 -
最大堆与最小堆
问题来源:数组中的第K个最大元素问题描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。实际面试题:在10亿个元素中,准确找到前1000个最大元素。思路:如果仅仅是大概的,我们可以将通过一次遍历,找到最大值maxmaxmax与最小值minminmin。然后在此区间内,划分出100万个桶。再通过一次遍历,将10亿...原创 2020-03-20 19:36:47 · 201 阅读 · 0 评论 -
不同路径(I和II)--动态规划
这里,我们将遇到两类不同路径的问题,第一类不考虑障碍物,第二类考虑障碍物。1. 不考虑障碍物问题来源:不同路径I问题描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例:输入: m = 3, n = 2输出: 3...原创 2020-03-18 18:02:47 · 205 阅读 · 0 评论 -
最大子序和--动态规划
问题来源:最大子序和问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。例子:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。1. O(n2)O(n^2)O(n2)算法这是一种暴力算法。两层遍历将所有的可能子列表取得,并计算该子列表和。第一遍遍历,...原创 2020-03-18 15:50:56 · 217 阅读 · 0 评论 -
最长回文子串--动态规划
问题来源:最长回文子串问题描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。例子:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。1. O(n3)O(n^3)O(n3)算法最简单也是最直观的做法是暴力算法。通过两层遍历,我们可以选出所有可能的子串,然后判断该子串是否是回文。class Solution: ...原创 2020-03-17 21:14:10 · 125 阅读 · 0 评论 -
字符串--验证回文串
问题来源:力扣算法面试汇总问题描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。例子:输入: “A man, a plan, a canal: Panama”输出: true# 输入s = "A man, a plan, a canal: Panama"1. O(n)O(n)O(n)思路:很简...原创 2020-02-29 21:49:12 · 333 阅读 · 0 评论 -
鸡蛋掉落(动态规划)
问题来源:力扣算法面试汇总问题描述:你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下...原创 2020-02-28 15:46:02 · 577 阅读 · 2 评论 -
合并两个有序数组
问题来源:力扣算法面试汇总问题描述:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。例子:输入:nums1 = [1,2,3,0,0,0]...原创 2020-02-27 19:49:59 · 144 阅读 · 0 评论 -
搜索二维矩阵II(分治法和蛇行)
问题来源:力扣算法面试汇总问题描述:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。例子:输入:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 2...原创 2020-02-26 16:53:27 · 465 阅读 · 0 评论 -
多数元素(哈希表和投票法)
力扣算法面试题汇总问题描述:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。例:输入: [2,2,1,1,1,2,2]输出: 2# 输入nums = [2,2,1,1,1,2,2]1. O(n2)O(n^2)O(n2)算法思路:尽量减少遍历次数,利用字典,可以做到只...原创 2020-02-25 22:54:32 · 320 阅读 · 0 评论 -
只出现一次的数字 (桶排序和位运算)
问题来源:力扣算法面试题汇总问题描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。例:输入: [4,1,2,1,2]输出: 4分析:1. O(n2)O(n^2)O(n2)算法思路:因为题目要求线性时间,所以只能常数次遍历。...原创 2020-02-25 20:59:30 · 250 阅读 · 1 评论