笔试算法题(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(或更快)成 ...
随机推荐
- bootstrap复选框和单选按钮
复选框和单选按钮标签包含在<Label>标签中<div class="checkbox"> <label><input type=&quo ...
- 关于ArcGis for javascript的使用
1.引用ArcGis for javascript核心类库的两种方式: 1.1.下载js包,解压缩放入项目中 1.1.1.下载核心类库压缩文件, 下载地址: https://developers.ar ...
- property_get 与 property_set 的返回值(转载)
转自:http://wzw19191.blog.163.com/blog/static/13113547020103218265162/ /* property_get: returns the le ...
- ZOJ5593:Let's Chat(双指针)
传送门 题意 给出x个a区间和y个b区间,询问a和b交区间的子区间长度为m的个数 分析 类似于双指针,具体见代码 trick 代码 #include <bits/stdc++.h> usi ...
- java jdbc 与mysql连接的基本步骤
Java与mysql链接的基本步骤: 第一步:注册驱动 方法一: DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 方法二:设置属性 ...
- Luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows 【区间dp】By cellur925
题目传送门 做完A Game以后找道区间dp练练手...结果这题没写出来(哭). 和A Game一样的性质,从两边取,但是竟然还有天数,鉴于之前做dp经常在状态中少保存一些东西,所以这次精心设计了状态 ...
- 手机APP测试点总结(参考)
参考链接:http://www.zengyuetian.com/?p=2305 手机APP测试点: 功能测试:多注意核心业务风险(如:注册.登录.付费.订单等) 兼容性测试:系统兼容性.硬件兼容性.软 ...
- JavaScript 编程艺术-第4章(JavaScript美术馆)代码
功 能:在同一个网页上切换显示不同的图片与文本(*亲测可用) 使用属性: a) document.getElementById(" ") ——返回一个与给定的id属性值的 ...
- VECTOR中pair的排序
vector中pair的排序方法 首先定义一个vector vector<pair<int,char> >vec; 调用排序函数sort sort(vec.begin(),ve ...
- ORA-00845错误原因及解决办法
故障现象: 用startup命令启动数据库时出现ora-00845错误提示: SQL> startup ORA-00845: MEMORY_TARGET not supported on thi ...