笔试算法题(23):数值整数次方 & 最大对称子串
出题:数值的整数次方(不考虑溢出),实现函数double Power(double base, int exponent);
分析:
- 解法1:最简单的方法是使用直接的乘法运算,但是注意处理几种特殊情况:exponent为负数,base为0;
- 解法2:将exponent分解成2的不同次方相加的表达式,通过重复平方来最大程度的减少乘法运算的次数。 当然,也可以递归实现,当n为偶数时,a^n=a^(n/2) * a^(n/2);当n为奇数时,a^n=a^((n-1)/2) * a^((n-1)/2) * a;
解题:
double power(double base, int exponent) {
if(base== && exponent<) {
printf("when base is 0, exp cannot be negative");
return ;
}
double product=1.0;
if(exponent>) {
for(int i=;i<exponent;i++) {
product*=base;
}
} else {
for(int i=;i>exponent;i--) {
product*=1.0/base;
}
}
return product;
}
double power1(double base, int exp) {
if(base == ) return ;
if(exp == ) return ;
double product=1.0, temp=1.0;
if(exp>) {
for(int i=exp;i>;i/=) {
if(exp & ==) product*=base;
base*=base;
}
} else {
exp=abs(exp);
for(int i=exp;i>;i/=) {
if(exp & ==) product*=/base;
base*=base;
}
}
return product;
}
出题:输入一个字符串,判断是否有对称的子串,并输出最大的对称子串的长度;
分析:
- 解法1:由于对称子串的最中间的两个字符相同,所以可以遍历判断两个相邻的字符是否相同,并且分别以两个字符为开始向前和向后拓展对称子串的长度,记录当 前最大的对称子串的长度,知道遍历完字符串。最优的时间复杂度为O(N),最差时间复杂度为O(N^2)。本实现没有考虑中心点对称(中间有一个字符), 仅考虑线对称(中心为两个字符);
- 解法2:也就是判断回文,翻转拼接原始字符串,然后使用后缀数组可以在O(NlogN)的时间复杂度内完成;
解题:
int SymmetricString(char *array, int length) {
int left=,right=,max=;
int leftT,rightT,maxT;
while(right<length) {
/**
* 外循环遍历整个字符串
* */
leftT=left;rightT=right;
maxT=;
while(leftT>= && rightT<length) {
/**
* 内循环以当前的left和right为起始
* 分别向左右扩展对称字符串的长度
* */
if(array[leftT]==array[rightT]) {
maxT++;
leftT--;rightT++;
} else
break;
}
/**
* 更新最大对称字符串大小的记录
* */
if(maxT>max) max=maxT;
left++;right++;
}
return *max;
}
笔试算法题(23):数值整数次方 & 最大对称子串的更多相关文章
- 前端如何应对笔试算法题?(用node编程)
用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ...
- 笔试算法题(12):整数的string到int转换 & 两个栈实现队列
出题:将输入的表示整数的字符串转变为对应的整数值: 分析: 每当右边增加一位,说明之前的sum应该高一个数量级,所以*10.由于这两个实现仅仅考虑正规的.正整数输入,所以需要一个Wrapper函数,其 ...
- 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 & 计算整数的7倍
出题:一个长度为N的数组,其中的元素取值范围是1到N,要求快速判断数组是否存在重复数字: 分析: 解法1:如果N个元素的范围都是在1到N,所以如果没有重复元素,则每一个位置恰好可以对应数组中的一个元素 ...
- 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...
- php笔试算法题:顺时针打印矩阵坐标-蛇形算法
这几天参加面试,本来笔试比较简单,但是在面试的时候,技术面试官说让我现场写一个算法,顺时针打印矩阵的坐标,如图所示 顺序为,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10 ...
- 笔试算法题(20):寻找丑数 & 打印1到N位的所有的数
出题:将只包含2,3,5的因子的数称为丑数(Ugly Number),要求找到前面1500个丑数: 分析: 解法1:依次判断从1开始的每一个整数,2,3,5是因子则整数必须可以被他们其中的一个整除,如 ...
- 笔试算法题(06):最大连续子数组和 & 二叉树路径和值
出题:预先输入一个整型数组,数组中有正数也有负数:数组中连续一个或者多个整数组成一个子数组,每个子数组有一个和:求所有子数组中和的最大值,要求时间复杂度O(n): 分析: 时间复杂度为线性表明只允许一 ...
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
- 笔试算法题(53):四种基本排序方法的性能特征(Selection,Insertion,Bubble,Shell)
四种基本算法概述: 基本排序:选择,插入,冒泡,希尔.上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件.前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成 ...
随机推荐
- python系列1_travel
Python__copy copy模块用于对象的拷贝操作.该模块只提供了两个主要的方法:copy.copy与copy.deepcopy,分别表示浅复制与深复制. 浅拷贝(copy):拷贝父对象,不会拷 ...
- 题解报告:hdu 2030 汉字统计
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2030 Problem Description 统计给定文本文件中汉字的个数. Input 输入文件首先 ...
- fastboot命令详解
Android手机分区(每个分区都有相应的img文件对应):开机启动画面区(splash1),数据恢复区(recovery),内核区(boot), 系统区(system),数据缓存区(cache),用 ...
- 自定义View(11)**在onDraw中使用矩阵Matrix
1.代码示例 1.1 效果 原图 : 其尺寸为162 x 251,示例中的红点是变形的锚点. 变形之后: 1.2 代码 package com.e.weixin.session.view; impor ...
- 08 H5新增input元素
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- python_数据类型基本操作(2)
概览: 第1章 基础数据类型宏观的初识第2章 int 第3章 bool 第4章 str 4.1 python体现形式 4.2 引号用法 4.3 字符串运算 4.3.1 字符串相加 4.3.2 字符串相 ...
- android环境搭建环境 cordova run android gradle wrapper报错
cordova run android命令报错 Error: Could not find an installed version of Gradle either in Android Studi ...
- 掌握Spark机器学习库(课程目录)
第1章 初识机器学习 在本章中将带领大家概要了解什么是机器学习.机器学习在当前有哪些典型应用.机器学习的核心思想.常用的框架有哪些,该如何进行选型等相关问题. 1-1 导学 1-2 机器学习概述 1- ...
- java JDK在windows及mac下安装配置
windows下安装: JDK下载 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...
- jq 中.html(),.text()和.val()的总结
html与.text的方法操作是一样,只是在具体针对处理对象不同 html处理的是元素内容,.text处理的是文本内容 html只能使用在HTML文档中,.text 在XML 和 HTML 文档中都能 ...