自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

转载 二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 如 9 ‭1001‬ 则输出2 思路 这是一个考察二进制和位运算的面试题 先复习下位运算 几个用法-华仔要长胖 根据: 取指定位上的数字,如取得数字 1010 1010 的最后四位:1010 1010 & 0000 1111 = 0000 101 方法一 判断整数二进制表示中最右边的一位是不是1,接着把输入的整数...

2019-09-27 18:51:00 100

转载 剪绳子问题(动态规划,贪婪,递归)

给你一根长度为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 480

转载 机器人的运动范围

地上有一个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 94

转载 矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出)。 但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行...

2019-09-21 18:31:00 71

转载 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 思路 采用二分法来查找 - 使用两个指针分别指向数组的第一个元素和最后一个元素(lo,hi) - 中间元素(mid)>=前面的元素(lo) 说明前面递...

2019-09-17 19:24:00 53

转载 斐波那契额数列

传统的递归实现 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 65

转载 二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路 1.二叉树为空,则返回空; 2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点; 3.节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点; 否则继续向上遍历其父节点的父节点,重复...

2019-09-07 19:39:00 71

转载 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出其二叉树并输出它的头结点。 前序遍历:中左右 中序编列:左中右 后续编列:左右中 ->点我 思路 在前序排序遍历序列中,第一个...

2019-09-06 14:48:00 135

转载 从尾到头打印链表

输一个链表的头结点,从尾到头反过来打印出每一个节点的值. 节点定义如下 class ListNode{ int val; ListNode next = null; public ListNode(int val) { this.val = val; } } 思路 从头到尾遍历链表,把每个节点放入栈中,遍历完后,从栈顶开始逐个输出节点的值...

2019-09-04 19:46:00 54

转载 符号表小结

1. 符号表算法比较 算法 插入 查找 是否有序 链表实现的无序符号表 N N yes 二分查找实现的有序符号表 N logN yes 二叉查找树 logN logN yes 2-3 查找树 logN logN yes 拉链法实现的散列表 N/M N/M no 线性探测法实现的散列表 1 1 no 应当优先考虑散列表,当需要有序性操作时使用红黑树。...

2019-09-04 19:00:00 88

转载 散列表

散列表类似于数组,可以把散列表的散列值看成数组的索引值。访问散列表和访问数组元素一样快速,它可以在常数时间内实现查找和插入操作。 由于无法通过散列值知道键的大小关系,因此散列表无法实现有序性操作。 查找 用散列函数将被查找的键转化程数组的一个索引(理想状态下,不同的键都能转化为不同的索引值。当然这只是理想情况,所以我们需要面对两个或者多个键都会散列到相同的索引值也就是碰撞 处理碰撞(拉...

2019-09-04 18:34:00 74

转载 浮躁

红黑树告辞 转载于:https://www.cnblogs.com/aiguozou/p/11443147.html

2019-09-01 18:45:00 76

转载 树的遍历

前序遍历:中左右 中序编列:左中右 后续编列:左右中 //前序遍历 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 60

转载 替换空格

请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。 思路 先遍历一次字符串,统计出字符串中空格的总数,并计算出替换之后的字符串的总长度,每替换一个加2 然后准备两个指针p1,p2 p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾 p1向前移动,复制到P2指向的位置,直到碰到空格p1向前移动1...

2019-08-31 14:25:00 81

转载 二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路 在矩阵的右上角开始查找 大于剔除当前列 小于剔除当前行 等于返回true 实现 public boolean Find(int[][] arr, int target) { int rows = ar...

2019-08-31 12:52:00 77

转载 不修改数组找出重复的数字

在一个长度为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 58

转载 数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了, 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3}, 那么对应的输出是重复的数字2或者3。 实现 数组排序 排序后,从头到尾扫描 public static ArrayList<Integ...

2019-08-30 16:39:00 61

转载 二叉查询树(BST)

二叉树,每个节点只有一个父节点(根节点除外),每个节点都只有左右两个链接,分别指向自己的左子节点和右子节点 二叉查找树 (BST)是一颗二叉树,并且每个节点的值都大于等于其左子树中的所有节点的值而小于等于右子树的所有节点的值。 二叉树遍历 前序遍历:中左右 中序编列:左中右 (BST中序编列是递增顺序排序) 后续编列:左右中 具体实现<-点我 基本实现 public c...

2019-08-29 16:37:00 115

转载 符号表

符号表是一种存储键值对的数据结构,支持两种操作, - 插入(put) 将新的键值对存入表中 - 查询(get) 给定键得到相应的值 规则 重复的键 每一个键只能对应着一个值(表中不允许存在重复的键) 当存入的的键值对和表中已有的键冲突时,新的值会替代旧的值 空键 键不能为空,使用空键会产生一个运行异常。 空值 规定不允许有空值,当键不存在时get()返回空(null),任何不在表中的键关...

2019-08-27 19:32:00 148

转载 排序应用

稳定性 如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是稳定的 稳定的排序算法:插入排序、归并排序 不稳定的排序算法:选择排序、希尔排序、快速排序和堆排序 一般只有在稳定性是必要的情况下,稳定的排序算法才有优势。 各种排序算法的性能特点 算法 是否稳定 是否为原地排序 时间复杂度 空间复杂度 备注 选择排序 否 是 N^2 1 插入排序 是 是 介于...

2019-08-25 19:06:00 117

转载 快速排序

快速排序是一种分治的排序算法。 它的工作原理是将一个数组分成两部分, 通过切分实现某一部分总小于另一数组,然后分别独立排序。 切分 实现1 一般策略是先随意地选取 a[lo] 作为切分元素,即那个会被排定的元素,然后我们 从数组的左端开始向右扫描直到找到一个大于等于它的元素, 再从数组的右端开始向左扫描直到找到一个小于等于它的元素。 交换它们的位置 递归1-4,当两个指针相遇时,我们就...

2019-08-25 18:47:00 66

转载 优先级队列

优先级队列的特征在于删除最大值和插入操作。 初级实现 数组实现(无序):惰性方法,仅在必要的时候找出最大元素; 数组实现(有序):积极方法:在插入时就保持列表有序,使后续操作更高效; 链表表示法 数据结构 插入元素 删除最大元素 有序数组 N 1 无序数组 1 N 堆 logN logN 理想情况 1 1 在上述优先队列的初级实现中,删除最大元素和插...

2019-08-25 10:33:00 108

转载 归并排序

将两个有序的数组归并成一个更大的有序数组。 原地归并的抽象方法 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 77

转载 初级排序算法

排序模板 public class Example { public static void sort(Comparable[] a) { // 各类排序算法 } private static boolean less(Comparable v, Comparable w) { // 对元素进行比较 return ...

2019-08-22 15:14:00 74

转载 队列,栈

队列(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 41

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除