算法、趣味题
中琦2513
天道酬勤
展开
-
八大排序算法的Python实现
1、插入排序描述插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这转载 2016-01-19 21:10:03 · 45550 阅读 · 0 评论 -
程序员--经典10道脑力题
挑选了10个比较精彩的智力题,并且把它们都整理到了一起,与大家一同分享。10个精彩的逻辑思维题:1. 给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做?答案:把扑克牌分成两堆,一堆10张,一堆42张。然后,把小的那一堆里的所有牌全部翻过来。2. 如何用一枚硬币等概率地产生...原创 2017-03-16 11:30:32 · 50921 阅读 · 1 评论 -
五大常用算法之一:分治算法
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其...原创 2018-03-14 12:49:45 · 45483 阅读 · 0 评论 -
五大常用算法之二:动态规划算法
动态规划算法一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通...原创 2018-03-14 12:52:53 · 46769 阅读 · 1 评论 -
五大常用算法之三:贪心算法
贪心算法一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 所...原创 2018-03-14 13:11:26 · 46167 阅读 · 0 评论 -
五大常用算法之四:回溯法
回溯算法1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规...原创 2018-03-14 13:14:20 · 45688 阅读 · 0 评论 -
五大常用算法之五:分支限界法
分支限界算法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依...原创 2018-03-14 13:16:24 · 46046 阅读 · 0 评论 -
最新最全的非常有趣的逻辑推理题目大全
1、村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。 每个人可以观察其他的49条狗,以判断它们是否生病(如果有病一定能看出来),只是自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要枪毙自己的狗(发现后必须在一天内枪毙),而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。 第一天大家全看完了,但枪没有...原创 2018-04-20 10:25:18 · 78973 阅读 · 3 评论 -
斐波拉契数列 Java三种实现
对于很多Java初学者来说,求解斐波拉契数列,基本上所使用的方式都是递归。对于求解斐波拉契数列来说,递归的实现方式的效率是极其低下的。在此,我贴出三种实现(递归,迭代,动态规划):我们先看代码的执行效果:再看代码实现:package com.aura.funny.fibonacci;import java.util.HashMap;import java.util...原创 2019-06-11 08:33:53 · 13044 阅读 · 4 评论 -
求一维数组蓄水数
1、需求很多程序员在面试的时候,都可能遇到一些逻辑思维/编程题,这样的题目非常有意思。而且非常考验程序员的解题技巧和代码编写能力。我这儿就曾经遇到过一个。具体需求看图2、解题思路废话不多数。直接给大家讲解思路:1、先找出整个数组中的最大值。2、整个数组就被这个最大值给分成了两个数组。3、左边数组,从左往右遍历,计算每个位置的蓄水数,计算规则是:找到当前位置的左...原创 2019-06-20 18:56:00 · 9192 阅读 · 3 评论 -
求二维数组蓄水数
1、需求接上一个需求:求一维数组蓄水数,如果数组是二维数组呢?如果求得蓄水数呢?比如这种情况:红色的格子是能蓄水的格子,蓝色的各自是墙, 也就是不能蓄水的格子2、解题思路其实对于这种题目,会很很多的难点,比如:简单低洼地带,直接求蓄水数,上下左右 55 5 5, 那中间的3 是能蓄水的比如:比如这种: 以上这些图形出现的时候...原创 2019-06-20 19:58:34 · 8950 阅读 · 2 评论 -
十大算法,让你轻松进阶高手
算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divideandconquer...转载 2016-01-07 23:12:42 · 46032 阅读 · 0 评论 -
逆波兰表达式
问题来由:读入一个字符串形式的四则运算表达式,输出对应的计算结果。如读入的是“6 * ( 5 + ( 2 + 3) * 8 + 3)”,那么解析后的输出结果应为288。思路:一般的计算过程是这样的,首先计算优先级最高的小括号里面的内容,即“( 5 + ( 2 + 3) * 8 + 3)”, 将“2 + 3”的计算结果并存为A,接着用计算“A*8”,并存为B 计算“5+B+3”,结果...转载 2016-01-26 21:27:50 · 46214 阅读 · 0 评论 -
经典算法排行榜
在硬件越来越强悍的今天,算法还重要吗?答案是毋庸置疑的。要知道,如今软件正在统治世界,而算法又是软件的灵魂……当你每天在自己的电脑上听歌或办公或看电影时,你是否想知道自己每天会用到多少种算法?奥地利符号计算研究所的Christoph Koutschan博士做过一个面向计算机科学家的调查,请他们票选出最重要的算法。一起来看看调查的结果:A* 搜索算法—原创 2016-01-28 23:12:49 · 46754 阅读 · 0 评论 -
五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法概述
五大常用算法之一:分治算法一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……任何一个可原创 2017-10-19 18:53:33 · 49222 阅读 · 3 评论 -
JAVA最新编程50题
本文对50道经典的java程序题进行详细解说,对于初学者可以跳过一些逻辑性太强的题目,比如第一题用到了方法的递归,初学者可能不理解,最好先看那些有if、for、while可以简单解决的程序题!但是,对于比较深入学习过的同学,还是希望可以一口气就看完,这是比较全面思维锻炼!题目:https://www.cnblogs.com/VellBibi/p/3500671.html【程序1...原创 2018-03-31 16:46:58 · 109153 阅读 · 38 评论