OptimalSolution(9)--其他问题(1)】的更多相关文章

一.从5随机到7及其扩展 题目1:给定一个等概率随机产生1~5的随机函数rand1to5: public int rand1To5() { return (int)(Math.random() * 5) + 1; } 除此之外,不能使用任何额外的随机机制,请用rand1To5实现等概率随机产生1~7的随机函数random1To7. 解法: 第一步:rand1To5()等概率随机产生1,2,3,4,5 第二步:rand1To5()-1等概率随机产生0,1,2,3,4 第三步:(rand1To5()…
一.有关阶乘的两个问题 二.最大的leftMax与rightMax之差的绝对值 三.路径数组变为统计数组 四.一种字符串和数字的对应关系 五.1到n中1出现的次数 六.数字的英文表达和中文表达 七.分糖果问题 八.设计一个没有扩容负担的堆结构 九.随时找到数据流的中位数 十.在两个排序数组中找到第K小的数 十一.出现次数的Top K问题 十二.Manacher算法 十三.KMP算法 十四.求棋子问题 十五.画匠问题 十六.邮局选址问题…
一.不用额外变量交换两个整数的值 如果给定整数a和b,用以下三行代码即可交换a和b的值.a = a ^ b; b = a ^ b; a = a ^ b; a = a ^ b :假设a异或b的结果记为c,c就是a整数位信息和b整数位信息的所有不同信息.例如,a=4=100,b=3=011,a^b=c=000b = a ^ b :a异或c的结果就是b.比如a=4=100,c=000,a^c=011=3=b,也就是b = a ^ b ^ b = aa = a ^ b :b异或c的结果就是a.比如b=3…
一.布隆过滤器 问题:不安全网页的黑名单包含100亿个黑名单网页,每个网页的URL最多占用64B.现在想要实现一种网页过滤系统,可以根据网页的URL判断该网页是否在黑名单上,如何设计该系统. 要求:允许有万分之一以下的判断失误率:使用的额外空间不能超过30GB 思路:如果把黑名单中所有的URL通过数据库或者哈希表保存下来,至少需要640GB的空间. 解答:如果遇到网页黑名单系统.垃圾邮件过滤系统.爬虫的网址判重系统等题目,并且系统容忍一定程度的失误率以及对空间要求比较严格,那么需要用布隆过滤器来…
一.设计一个有getMin功能的栈 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作.pop.push.getMin操作的时间复杂度都是O(1). 思路:设计两个栈,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有区别,这个栈记为stackData:另一个栈用来保存每一步的最小值,记为stackMin 解法1: push:假设当前数据为newNum,先将其压入stackData.然后判断stackMin是否为空:(1)如果为空,则newNum也压入栈(2)如…
一.找到无序数组中最小的k个数 二.在数组中找到出现次数大于N/K的数 三.最长的可整合子数组的长度 四.不重复打印排序数组中相加和为给定值的所有二元组和三元组 五.未排序正数数组中累加和为给定值的最长子数组的长度 六.未排序数组中累加和为给定值的最长子数组系列问题 七.未排序数组中累加和小于或等于给定值的最长子数组长度 八.计算数组的小和 九.子矩阵的最大累加和问题 十.在数组中找到一个局部最小的位置 十一.打印中子数组的最大累乘积 十二.打印N个数组整体最大的Top K 十三.边界都是1的正…
一.转圈打印矩阵 题目:给定一个整型矩阵matrix,按照转圈的方式打印它. 要求:额外空间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 思路:矩阵分圈处理问题.用矩阵中左上角的坐标(tR,rC)和右下角的坐标(dR,dC)就可以表示一个子矩阵. 例如:(0,0)和(3,3)表示的是原来矩阵的最外层,此时打印:1 2 3 4 8 12 16 15 14 13…
一.将整数字符串转成整数值 二.判断字符数组中是否所有的字符都只出现过一次 三.在有序但含有空的数组中查找字符串 四.数组中两个字符串的最小距离 五.添加最少字符使字符串整体都是回文字符串 六.括号字符串的有效性和最长有效长度 七.公式字符串求值 八.0左边必有1的二进制字符串数量 九.拼接所有字符串产生字典顺序最小的大写字符串 十.找到字符串的最长无重复子串 十一.最小包含子串的长度 十二.回文最少分割数 十三.字符串匹配问题 十四.字典树(前缀树)的实现…
一.判断两个字符串是否互为变形词 问题:给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1与str2互为变形词. 举例:str1=“123”,str2=“231”,返回true.str1=“123”,str2=“2331”,返回false. 思路:如果str1和str2长度不同,直接返回false.如果长度相同,假设出现字符的编码值在0~255之间,那么先申请一个长度为256的整型数组map.map[a]=b代表字符串编码为a的字…
一.环形单链表的约瑟夫问题 二.判断一个链表是否为回文结构 三.将单向链表按某只划分成左边小.中间相等.右边大的形式 四.复制含有随机指针节点的链表 五.两个单链表相交的一系列问题 六.将单链表的每K个节点之间逆序 七.将搜索二叉树转换成双向链表…
单链表Node节点类 public class Node { public int val; public Node next; public Node(int val) { this.val = val; } } 双链表DoubleNode类 public class DoubleNode { public int val; public DoubleNode last; public DoubleNode next; public DoubleNode(int val) { this.val…
一.判断t1树是否包含t2树全部的拓扑结构 1 / \ 2 3 2 / \ / \ / \ 4 5 6 7 4 5 / \ / / 8 9 10 8 返回:true 解法(O(M×N)):如果t1中某棵子树头结点和t2头结点的值一样,则从这两个头结点开始匹配,匹配的每一步都是让t1上的节点跟着t2的先序遍历移动,每移动一步,都检查t1的当前节点和t2当前节点的值是否一样.如果匹配的过程中发现有不匹配的过程,直接返回false,那么再去寻找t1的下一棵树. public boolean conta…
一.在二叉树中找到累加和为指定值的最长路径长度 给定一棵二叉树和一个32位整数sum,求累加和为sum的最长路径长度.路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所形成的节点链 -3 / \ 3 -9 / \ / \ 1 0 2 1 /\ 如果sum=6,那么累加和为6的最长路径为:-3,3,0,6,所以返回4 1 6 如果sum=-9,那么累加和为-9的最长路径为:-9,所以返回1 第一步:生成变量maxLen,记录累加和等于sum的最长路径长度 第二步:生成哈希表sumMap,负…
一.判断二叉树是否为平衡二叉树(时间复杂度O(N)) 平衡二叉树就是:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1. 解法:整个过程为二叉树的后序遍历.对任何一个节点node来说,先遍历node的左子树,遍历过程中收集两个信息,一个是node的左子树是否为平衡二叉树,一个是node的左子树最深到哪一层即为lH.如果发现node的左子树不是平衡二叉树,无须进行后续过程.如果node的左子树是平衡二叉树,在遍历node的右子树,同样收集两个信息.如果node的右子树也是平衡二叉树…
一.二叉树的按层打印与ZigZag打印 1.按层打印: 1 Level 1 : 1 / \ 2 3 Level 2 : 2 3 / / \ 4 5 6 Level 3 : 4 5 6 / \ 7 8 Level 4 : 7 8 题目中要求同一层的节点必须打印在一行上,并且要求输出行号.这就需要我们在原来的广度优先遍历基础上,必须要搞明白的是什么时候要换行. 解决方法:使用node类型的变量last便是正在打印的当前行的最右节点,nLast便是下一行的最右节点.假设每一层都做从左到右的宽度优先遍历…
一.汉诺塔问题(包括chapter 1中的汉诺塔问题) 二. 三. 四. 五. 六. 七. 八.…
一.最长递增子序列(LIS) 给定数组arr,返回arr的最长递增子序列.例如,arr={2,1,5,3,6,4,8,9,7},返回的最长递增子序列为{1,3,4,5,8,9} 1.时间复杂度为O(N2)的方法 第一步:生成长度为N的数组dp,dp[i]表示在以arr[i]这个数结尾的情况下,arr[0...i]中的最大递增子序列长度,其中arr[0]=1 第二步:要计算dp[i],如果最长递增子序列以arr[i]结尾,那么在arr[0...i]中所有比arr[i]小的数都可以作为倒数第二个数.…
一.矩阵的最小路径和 1 3 5 9 1 4 9 18 1 4 9 18 8 1 3 4 9 9 5 8 12 5 0 6 1 14 14 5 11 12 8 8 4 0 22 22 13 15 12最小路径和最小的路径为:1 → 3 → 1 → 0 → 6 → 1 → 0 问题描述,给定矩阵m如上面所示,从左上角开始每次只能向右或者向下走,最后到达右下角,求最小路径和. 假设矩阵m的大小为M×N,首先生成大小和m一样的矩阵dp,dp[i][j]的值表示从开始位置(0,0)走到(i.j)位置的最…
一.斐波那契数列 斐波那契数列就是:当n=0时,F(n)=0:当n=1时,F(n)=1:当n>1时,F(n) = F(n-1)+F(n-2). 根据斐波那契数列的定义,斐波那契数列为(从n=1开始):1,1,2,3,5,8...,也就是除了第1项和第2项外,对于第N项,都有F(n) = F(n-1)+F(n-2) 1.时间复杂度为O(2n)的暴力递归算法 暴力递归算法是最慢的一种方法,加入要计算F(10)的值,那么就要计算F(9)和F(8)的值,而计算F(9)的值需要计算F(8)和F(7)的值,…
本文着重于算法的实现,对于理论部分可自行查看有关资料可以简略参考该博文:http://blog.csdn.net/u013007900/article/details/50379135 本文代码部分基于C实现,源码如下: /***************************************************************************** ** Copyright: NEW NEU laboratory ** File name: CTSP ** Descr…
本文忽略了对于模拟退火的算法的理论讲解,读者可参考相关的博文或者其他相关资料,本文着重于算法的实现: /***************************************************************************** ** Copyright: NEW NEU laboratory ** File name: SA_工作指派问题 ** Description:模拟退火算法解决工作指派问题 ** Author: 1702--GCJ ** Version:…