摘要:
原题链接:https://leetcode.com/problems/number-of-islands/题意描述:Given a 2d grid map of'1's (land) and'0's (water), count the number of islands. An island is... 阅读全文
随笔分类 - Data Structure and Algorithm
[LeetCode]Binary Tree Right Side View
2015-04-06 17:36 by 庸男勿扰, 202 阅读, 收藏,
摘要:
原题链接:https://leetcode.com/problems/binary-tree-right-side-view/题意描述:Given a binary tree, imagine yourself standing on therightside of it, return the v... 阅读全文
[LeetCode]House Robber
2015-04-06 17:31 by 庸男勿扰, 260 阅读, 收藏,
摘要:
原题链接:https://leetcode.com/problems/house-robber/题意描述:You are a professional robber planning to rob houses along a street. Each house has a certain amo... 阅读全文
[数字技巧]子集问题(寻找给定集合的所有子集)
2014-03-24 19:50 by 庸男勿扰, 2871 阅读, 收藏,
摘要:
我们定义该问题如下: 给定一个集合C,找出所有的集合C',使得C'包含于C。一、无重复元素的集合 我们首先来考虑一种简单的情形,C中的数都是各不相同的,这就意味着所产生的子集不会有重复的。 直观来说,求一个集合的子集,无非就是对每个元素进行枚举,枚举两种状态”选“还是”不选“。例如,对一个集合C,当对cur这个位置的元素进行枚举时,对剩余的元素可以递归调用这个枚举的过程,当cur为数组长度n时,代表枚举结束。 子集的解空间又叫子集树,其叶子节点所代表的状态即为所有的子集。例如,集合{1,3,5},其子集树如下所示: 如上图所示,共有8个叶子节点,代表8个子集,有了子集树,要求出 阅读全文
[字符串]最长不重复子串
2013-09-30 11:35 by 庸男勿扰, 4366 阅读, 收藏,
摘要:
题目描述: 最长不重复子串(Longest No Repeat String,LNRS)就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的。分析:解法一:动态规划 动态规划就是用来解决这种最优化问题,关于字符串的很多有趣的问题如最长公共自序列,最长上升子序列等都可以用动态规划来解,这道题我的第一想法也是动态规划。 动态规划的核心在于寻找最优子结构,对于一个字符,如果他与他前面的最长不重复子串都没有相同的字符,那么他也可以加入这个子串中,构成一个新的子串。即对于字符数组a[],dp[i]表示以a[i]为结尾的最长不重复子串长度,dp[0] = 1,... 阅读全文
[数字技巧]最大连续子序列和
2013-09-09 12:48 by 庸男勿扰, 395 阅读, 收藏,
摘要:
最大连续子序列和这个问题是一个比较常见的问题,出现在很多公司的面试笔试中。题目大概是这样描述的: 输入一个整形数组,数组中有正数也有负数,数组中连续一个或多个组成一个子序列,每个子序列都有一个和,求所有子序列的和的最大值。 一、暴力枚举 最暴力的解法是枚举起点和终点(或长度),连同求和的那个步骤,共三个for循环,复杂度是O(n3)。代码示例如下: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int n; 8 int arr[1001]; 9 long maxRes;10 int start;1... 阅读全文
[排序算法总结]冒泡排序、简单选择排序
2013-09-04 19:33 by 庸男勿扰, 694 阅读, 收藏,
摘要:
排序是日常生活中最常见的操作,也是算法中最有趣的问题之一,排序问题可以描述为: 输入:n个数 输出:输入序列的一个排列(即重新排序),使得a1’A[j])14 15 {16 17 swap(A[j-1],A[j]); 18 19 } 20 21 } 22 23 } 24 25 }View Code 复杂度: 不难看出,排序的基本运算是比较操作,当... 阅读全文
[基础数据结构]二叉树完全总结
2013-09-04 11:40 by 庸男勿扰, 1065 阅读, 收藏,
摘要:
树形结构是数据结构中一种非常常用的非线性结构。通常用来表示具备分支关系的层次结构。其中二叉树又是树形结构中最简单最常见的一种。一、定义 二叉树,顾名思义,只有两个分叉的树,他的特点就是每个节点至多只有两颗子树(即二叉树中不存在度大于2的节点),通常情况下,我们称二叉树的两颗子树为左子树和右子树。二叉树又可递归定义为:①一个空树;②左子树和右子树均为二叉树。换句话说,二叉树有三个部分组成,根节点和同为二叉树的左右子树。这种递归定义非常有趣,它将帮助我们解决很多二叉树的操作问题。 二叉树中有两种特殊的形态,分别是完全二叉树和满二叉树。 满二叉树是指,除叶子节点外,每个节点都有两个子节点... 阅读全文
[数字技巧]重复数字统计算法的空间优化
2013-08-29 15:54 by 庸男勿扰, 834 阅读, 收藏,
摘要:
今天在微博上看到的一道面试题,觉得非常有意思,特记录下来。 原题是这样的: 给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。能够在O(n)的时间复杂度,O(1)的空间复杂度要求下完成么? 这道题目最大的难点就在于时空限制,确切的说是空间限制,如果没有空间复杂度为O(1)的要求,我们很容易想出用一个hash表来记录元素的出现次数。实现的代码如下: 1 #include 2 #include 3 #include 4 5 int a[1001]; 6 int b[1001] 7 ... 阅读全文
浙公网安备 33010602011771号