算法
文章平均质量分 86
壮少Bryant
安卓小子
展开
-
面试题集锦
1、给定N张扑克牌和一个随机函数,设计一个洗牌算法假定N=54,首先,我们有一个随机函数发生器,能够产生1-54之间的随机数,如何保证抽第一张牌是54中可能,抽第二张牌是53中可能,…… 可以这样做,假设扑克牌是一个54维的数组card, 我们要做的就是从这个数组中随机取一个元素,然后在剩下的元素里再随机取一个元素… 这里涉及到一个问题,就是每次取完元素后,我们就不会让这个元素参与下一次的选取。原创 2016-09-03 11:49:20 · 318 阅读 · 0 评论 -
排序算法总结:
基于比较的排序算法1插入排序1 直接插入排序2希尔排序2交换排序1冒泡排序2快速排序3选择排序1简单选择排序2 堆排序4其它排序1 归并排序非基于比较的排序算法1基数排序2桶排序3计数排序总结基于比较的排序算法基于比较的排序算法有三种设计思路,分别为插入,交换和选择。 对于插入排序,主要有直接插入排序,希尔排序; 对于交换排序,主要有冒泡排序,快速排序; 对于选原创 2016-03-31 17:25:13 · 690 阅读 · 0 评论 -
好题集锦
1、如何仅用递归函数和栈操作逆序一个栈 一个栈依次入栈顺序为12345,从栈顶到栈底是54321,若要从栈顶到栈底是12345,即逆序,怎么做,只能用递归函数,不能用其他数据结构 public static void reverse(Stack<Integer> stack){ if(stack.isEmpty()){ return;原创 2016-08-27 22:22:19 · 597 阅读 · 0 评论 -
n个元素进栈,共有多少种出栈顺序
1.基于栈的问题分析我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1 //即 1 f(2) = 2 //即 12、21原创 2016-07-18 22:50:37 · 8661 阅读 · 2 评论 -
程序员面试金典(java版)
1确定字符互异2原串翻转3原串翻转4原串翻转5基本字符串压缩1.1、确定字符互异 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。原创 2016-06-27 23:51:02 · 2195 阅读 · 0 评论 -
回溯法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问题都可以使用回原创 2016-06-15 22:20:47 · 561 阅读 · 0 评论 -
贪心算法
一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 所以对所采用原创 2016-06-15 21:20:26 · 530 阅读 · 0 评论 -
算法系列1、动态规划
1基本概念2基本思想1、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。2、基本思想 将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最原创 2016-03-15 23:42:43 · 538 阅读 · 0 评论 -
算法系列2、分治算法
1基本概念2分治法适用的情况3分治法的基本步骤4设计程序的思维过程1、基本概念 字面上的解释是“分而治之”,就是把一个复杂的问题 1) 把它分成两个或多个更小的问题; 2) 分别解决每个小问题; 3) 把各小问题的解答组合起来,即可得到原问题的解答。 这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……原创 2016-03-16 09:47:58 · 483 阅读 · 0 评论 -
编程之美
1.2 中国象棋问题public class Solution { public static void main(String[] args) { char data = 0x11;//A、B都从1开始 while ((data&0x0F) != 0x0A)//B从1到9 {原创 2016-06-14 22:10:21 · 264 阅读 · 0 评论 -
二分查找
package cn.zhuang.Search;public class BinarySearch { /* * 用递归方式二分查找 */ public static int searchRecursive(int[] data , int from, int end , int target){ int middle; if(fr原创 2016-04-13 16:18:24 · 379 阅读 · 0 评论 -
用栈实现(+-*/)运算
1、判断括号的平衡 2、算数表达式求值 (((6+9)/3)*(6-4))原创 2016-04-13 01:14:02 · 644 阅读 · 0 评论 -
剑指Offer(java答案)
剑指Offer(java答案)剑指Offerjava答案5从尾到头打印链表6重建二叉树33把数组排成最小的数34丑数35第一个只出现一次的字符36数组中的逆序对37两个链表的第一个公共交点38数字在排序数组中出现的次数39二叉树的深度扩展题判断二叉树平衡40-数组只指出现一次的数字异或去重11-1000放在含有1001个元素的数组中只有唯一的一个元素值重复其它均只出现一次每原创 2016-04-12 21:23:22 · 22482 阅读 · 5 评论