- 博客(25)
- 收藏
- 关注
转载 二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。如 9 1001 则输出2思路这是一个考察二进制和位运算的面试题 先复习下位运算几个用法-华仔要长胖根据: 取指定位上的数字,如取得数字 1010 1010 的最后四位:1010 1010 & 0000 1111 = 0000 101方法一判断整数二进制表示中最右边的一位是不是1,接着把输入的整数...
2019-09-27 18:51:00
105
转载 剪绳子问题(动态规划,贪婪,递归)
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。思路注意当长度大于3 f[n]才能得到绳子的最大乘积动态规划特征从上往下分...
2019-09-24 00:39:00
486
转载 机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路跟 矩阵中的路径 类似分析:...
2019-09-22 15:59:00
100
转载 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行...
2019-09-21 18:31:00
76
转载 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。思路采用二分法来查找- 使用两个指针分别指向数组的第一个元素和最后一个元素(lo,hi)- 中间元素(mid)>=前面的元素(lo) 说明前面递...
2019-09-17 19:24:00
62
转载 斐波那契额数列
传统的递归实现public long fibonacci(int n) { if (n <= 0) { return 0; } if (n == 1) { return 1; } return fibonacci(n - 1) + fibonacci(n - 2);}但以递归求解的过程中会出现很多重复求...
2019-09-15 19:19:00
71
转载 二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路1.二叉树为空,则返回空;2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点;3.节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复...
2019-09-07 19:39:00
75
转载 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出其二叉树并输出它的头结点。前序遍历:中左右中序编列:左中右后续编列:左右中->点我思路在前序排序遍历序列中,第一个...
2019-09-06 14:48:00
147
转载 从尾到头打印链表
输一个链表的头结点,从尾到头反过来打印出每一个节点的值.节点定义如下class ListNode{ int val; ListNode next = null; public ListNode(int val) { this.val = val; }}思路从头到尾遍历链表,把每个节点放入栈中,遍历完后,从栈顶开始逐个输出节点的值...
2019-09-04 19:46:00
60
转载 符号表小结
1. 符号表算法比较算法插入查找是否有序链表实现的无序符号表NNyes二分查找实现的有序符号表NlogNyes二叉查找树logNlogNyes2-3 查找树logNlogNyes拉链法实现的散列表N/MN/Mno线性探测法实现的散列表11no应当优先考虑散列表,当需要有序性操作时使用红黑树。...
2019-09-04 19:00:00
91
转载 散列表
散列表类似于数组,可以把散列表的散列值看成数组的索引值。访问散列表和访问数组元素一样快速,它可以在常数时间内实现查找和插入操作。由于无法通过散列值知道键的大小关系,因此散列表无法实现有序性操作。查找用散列函数将被查找的键转化程数组的一个索引(理想状态下,不同的键都能转化为不同的索引值。当然这只是理想情况,所以我们需要面对两个或者多个键都会散列到相同的索引值也就是碰撞处理碰撞(拉...
2019-09-04 18:34:00
79
转载 树的遍历
前序遍历:中左右中序编列:左中右后续编列:左右中//前序遍历public static void preOrder(Node node) { if (node == null) { return; } System.out.print(node.value); preOrder(node.left); preOrder(...
2019-08-31 19:52:00
66
转载 替换空格
请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。思路先遍历一次字符串,统计出字符串中空格的总数,并计算出替换之后的字符串的总长度,每替换一个加2然后准备两个指针p1,p2p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾p1向前移动,复制到P2指向的位置,直到碰到空格p1向前移动1...
2019-08-31 14:25:00
86
转载 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路在矩阵的右上角开始查找大于剔除当前列小于剔除当前行等于返回true实现public boolean Find(int[][] arr, int target) { int rows = ar...
2019-08-31 12:52:00
84
转载 不修改数组找出重复的数字
在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。思路按照二分查找的思路数组长度为n+1,而数字只从1到n,说明必定有重复数字。可以用二分查找扩展{2, 3, 5, 4,...
2019-08-31 09:49:00
62
转载 数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。实现数组排序排序后,从头到尾扫描public static ArrayList<Integ...
2019-08-30 16:39:00
66
转载 二叉查询树(BST)
二叉树,每个节点只有一个父节点(根节点除外),每个节点都只有左右两个链接,分别指向自己的左子节点和右子节点二叉查找树 (BST)是一颗二叉树,并且每个节点的值都大于等于其左子树中的所有节点的值而小于等于右子树的所有节点的值。二叉树遍历前序遍历:中左右中序编列:左中右 (BST中序编列是递增顺序排序)后续编列:左右中具体实现<-点我基本实现public c...
2019-08-29 16:37:00
119
转载 符号表
符号表是一种存储键值对的数据结构,支持两种操作,- 插入(put) 将新的键值对存入表中- 查询(get) 给定键得到相应的值规则重复的键每一个键只能对应着一个值(表中不允许存在重复的键)当存入的的键值对和表中已有的键冲突时,新的值会替代旧的值空键键不能为空,使用空键会产生一个运行异常。空值规定不允许有空值,当键不存在时get()返回空(null),任何不在表中的键关...
2019-08-27 19:32:00
150
转载 排序应用
稳定性如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是稳定的稳定的排序算法:插入排序、归并排序不稳定的排序算法:选择排序、希尔排序、快速排序和堆排序一般只有在稳定性是必要的情况下,稳定的排序算法才有优势。各种排序算法的性能特点算法是否稳定是否为原地排序时间复杂度空间复杂度备注选择排序否是N^21插入排序是是介于...
2019-08-25 19:06:00
121
转载 快速排序
快速排序是一种分治的排序算法。 它的工作原理是将一个数组分成两部分,通过切分实现某一部分总小于另一数组,然后分别独立排序。切分实现1一般策略是先随意地选取 a[lo] 作为切分元素,即那个会被排定的元素,然后我们从数组的左端开始向右扫描直到找到一个大于等于它的元素,再从数组的右端开始向左扫描直到找到一个小于等于它的元素。交换它们的位置递归1-4,当两个指针相遇时,我们就...
2019-08-25 18:47:00
70
转载 优先级队列
优先级队列的特征在于删除最大值和插入操作。初级实现数组实现(无序):惰性方法,仅在必要的时候找出最大元素;数组实现(有序):积极方法:在插入时就保持列表有序,使后续操作更高效;链表表示法数据结构插入元素删除最大元素有序数组N1无序数组1N堆logNlogN理想情况11在上述优先队列的初级实现中,删除最大元素和插...
2019-08-25 10:33:00
114
转载 归并排序
将两个有序的数组归并成一个更大的有序数组。原地归并的抽象方法public static void merge(Comparable a[], int lo, int mid, int hi) { int i = lo, j = mid + 1;//两个待归半边并的头 //将代归并的元素放入到aux中 for (int k = lo; k <= hi; ...
2019-08-25 10:15:00
82
转载 初级排序算法
排序模板public class Example { public static void sort(Comparable[] a) { // 各类排序算法 } private static boolean less(Comparable v, Comparable w) { // 对元素进行比较 return ...
2019-08-22 15:14:00
81
转载 队列,栈
队列(FIFO)先进先出数组实现判断实现public class MyCircularQueue02 { private int[] data; private int head; private int tail; private int size; public MyCircularQueue02(int k) { ...
2019-08-22 14:01:00
44
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人