算法题的五种解法

方法一:举例法

先列举一些具体的例子,看能否发现其中的一般规则。

示例:给定一个具体时间,计算时针与分针之间的角度。

方法二:模式匹配法

将现有问题与相似问题作类比,看看内否通过修改相关问题的解法来解决新问题。

分析:这个问题和两个问题有点类似

1)在一个无序的数组中查找最小的元素

  这个问题就是遍历所有元素即可,没有用到给定信息(这是一个有序数组),实在没办法再用这种。

2)在一个有序的数组中找出某个特定元素(比如通过二分查找法)

  这是一个有序数组,只是一部分元素循环移动过。因此元素排序肯定是从小到大,在某个位置突然变小,接着又开始从小到大排序。那个“转折点”正是最小的元素。

  比较中间元素和末尾元素(6和2),由于mid > right,可以确定这个转折点就在这两个元素之间。如果mid < right,则说明转折点要么在牵绊部分,要么根本不存在。

方法三:简化推广法

  简化推广法即分多步走,首先,我们会 修改某个约束条件,比如数据类型或数据量,从而简化这个问题。接着我们转而处理这个问题的简化版本。一旦找到解决了简化版问题的算法,我们就可以基于这个问题进行推广,让它适用于这个问题的复杂版本。

方法四:简单构造法

方法五:数据结构头脑风暴法

我们可以快速过一遍数据结构的列表,然后逐一尝试各种数据结构。这种方法很实用,因为一旦找到合适的数据结构,很多问题就迎刃而解。

来自:

《程序员面试金典(第5版)》

原文地址:https://www.cnblogs.com/xdyixia/p/9226889.html

时间: 2024-10-03 21:20:18

算法题的五种解法的相关文章

LeetCode算法题-Find the Difference(Java实现-五种解法)

这是悦乐书的第214次更新,第227篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第82题(顺位题号是389).给定两个字符串s和t,它们只包含小写字母.字符串t由随机混洗字符串s生成,然后在随机位置再添加一个字母.找到t中添加的字母.例如: 输入:s ="abcd", t ="abcde" 输出:'e' 说明:'e'是添加的字母. 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Jav

涨姿势题2_水题_两种解法

Problem Description 涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不能卡水题!水题都卡,绝对不是一个代码手的风范!3,不能出错,错一次即罚时20分钟,对于水题来讲是致命的!4,要能看出来一题是水题!没有这条,上面三条都是没有意义的! 如果你希望你成团队中一个合格的代码手,那么这套题是你最好的选择,快AC吧! 本系列即是为了提高水题代码手的素养而准备的!水题经常需要用到

凸包问题的五种解法[转]

前言: 首先,什么是凸包? 假设平面上有p0~p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来.当这个多边形是凸多边形的时候,我们就叫它“凸包”.如下图: 然后,什么是凸包问题? 我们把这些点放在二维坐标系里面,那么每个点都能用 (x,y) 来表示. 现给出点的数目13,和各个点的坐标.求构成凸包的点? 解一:穷举法(蛮力法) 时间复杂度:O(n³). 思路:两点确定一条直线,如果剩余的其它点都在这条直线的同一侧,则这两个点是凸包上的点,否则就不是. 步骤: 将点集里面

Longest Common Prefix 五种解法(JAVA)

解法一:水平扫描 int indexOf(String str): 在字符串中检索str,返回其第一出现的位置,如果找不到则返回-1 class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0) return ""; String prefix = strs[0]; for(int i = 1; i < strs.length; i++){ while(strs[i

java并发编程--一道经典多线程题的2种解法

问题的描述 启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20....以此类推, 直到打印到75. 程序的输出结果应该为: 线程1: 1 线程1: 2 线程1: 3 线程1: 4 线程1: 5 线程2: 6 线程2: 7 线程2: 8 线程2: 9 线程2: 10 ... 线程3: 71 线程3: 72 线程3: 73 线程3: 74 线程3: 75

通信算法之五:五种编码方式增益比较及matlab仿真验证

1. 卷积码增益性能.误码率 信道环境:AWGN 信噪比SNR :0:0.1:6 MATALB仿真架构:源比特 +卷积码 +BPSK +AWGN +Viterbi +BER 说明:卷积编码,不同的R码率,不同的约束长度 2. Turbo增益性能.误码率 信道环境:AWGN 信噪比SNR :-1:0.1:2 MATALB仿真架构:源比特 +Turbo编码 +BPSK +AWGN +Turbo译码+BER 说明:turbo译码,不同的译码算法那,不同的交织长度,不同的迭代次数. LTE 标准的tur

LCA的五种解法

标准求法 //O(nlogn)-O(logn) #include<cstdio> #include<algorithm> using namespace std; const int maxn=100010; int first[maxn],next[maxn*2],to[maxn*2],dis[maxn*2]; int n,m; void AddEdge(int a,int b,int c) { to[++m]=b; dis[m]=c; next[m]=first[a]; fir

JAVA常见算法题(十五)

package com.xiaowu.demo; /** * * 输入三个整数x,y,z,请把这三个数由小到大输出. * * @author WQ * */ public class Demo15 { public static void main(String[] args) { sort(15, 10, 5); } //定义临时变量进行数字的移位操作 public static void sort(int x, int y, int z) { if (x > y) { int t = x;

LeetCode算法题-Power of Four(Java实现-六种解法)

这是悦乐书的第205次更新,第216篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第72题(顺位题号是342).给定一个整数(带符号的32位),写一个函数来检查它是否为4的幂.例如: 输入:16 输出:true 输入:5 输出:false 跟进:你可以在没有循环/递归的情况下解决它吗? 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试. 02 第一种解法 特殊情况:当num小于等于1时,直接返回