![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔试题
zszszs1994
研究生在读...
展开
-
找出缺失的整数
题目: 一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数。如何找出这个缺失的整数?答:很简单也很高效的方法,先算出1+2+3….+100的和,然后依次减去数组里的元素,最后得到的差,就是唯一缺失的整数。题目扩展: 一个无序数组里有若干个正整数,范围从1到100,其中99个整数都出现了偶数次,只有一个整数出现了奇数次(比如1,1,2,2,3,3,4,5,5),如何找到这个出现奇数转载 2016-10-17 19:36:14 · 401 阅读 · 0 评论 -
链表
1.输入一个链表,从尾到头打印链表每个节点的值 vector<int> printListFromTailToHead(ListNode* head) { vector<int> dst; while (head != nullptr) { dst.push_back(head->val); head =...原创 2017-12-09 11:12:08 · 159 阅读 · 0 评论 -
栈
1.栈的压入弹出,pushV序列表示栈的压入顺序,判断popV序列是否是该栈的一种弹出顺序//大致思路就是,首先按照pushV的顺序压入栈,当栈顶和popV的值相同时出栈。判断栈最后是否会有剩余序列 bool IsPopOrder(vector<int> pushV, vector<int> popV) { stack<int> tmpStack; int i = 0; in原创 2017-12-14 17:11:18 · 148 阅读 · 0 评论 -
滑动窗口中的最大值
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1},{2,3原创 2017-12-14 20:00:10 · 222 阅读 · 0 评论 -
数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。//可以用位运算实现,如果将所有所有数字相异或,则最后的结果肯定是那两个只出现一次的数字异或的结果,所以根据异或的结果1所在的最低位,把数字分成两半,每一半里都还有只出现一次的数据和成对出现的数据这样继续对每一半相异或则可以分别求出两个只出现一次的数字 void FindNumsAppearOnce(vect原创 2017-12-26 10:40:51 · 182 阅读 · 0 评论 -
最大子序列和问题
给定整数A1,A2,A3······An(可能有负数),求序列中子序列和的最大值。(为方便起见,若所有整数都为负数,则最大子序列和为0) int MaxSubSequenceSum(vectorint> A) { int thisSum, maxSum; thisSum = maxSum = 0; for (size_t i = 0; i < A.size(); i+原创 2018-01-04 11:36:15 · 272 阅读 · 0 评论 -
快速选择---选择数组中第k个最小值
参考《数据结构与算法分析》186页,按照快速排序的思路进行找出第k个最小值,其中只保证数组中第k-1个值为第k个最小值。(同样,第k个最大值为第size - k + 1个最小值) #include #include #define cutOff 3 using namespace std; //三数中值分割方法 int Media3(vectorint>& vecUnsort, int原创 2018-01-04 10:10:40 · 924 阅读 · 0 评论 -
二叉树
0.创建二叉树 //创建二叉树 int CteateBiTree(TreeNode** T) { int ch; scanf("%d", &ch); if (ch == -1) { *T = NULL; return 0; } else { *T = new TreeNode(-1...原创 2016-10-06 15:48:58 · 339 阅读 · 0 评论 -
动态规划---纸币组合问题
题目:假设银行里一共有n种硬币,第一种硬币的价值为V1。假设想把k元兑换成零钱,一共有多少种兑换方案。 例如,一共有1,2,5三种硬币,k = 5,则有以下兑换方案:11111,1112,122,5。共有4中兑换方案。 动态规划问题最重要的是要找到状态转移方程!!! 用dp[i][sum]表示使用前i种硬币来组合sum这些钱有多少种兑换方案。那么 dp[i][sum] = dp[...原创 2018-04-24 10:29:00 · 4365 阅读 · 0 评论 -
跳台阶问题--斐波那契数列
本篇文章有两道题。第一题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。对于本题,前提只有 一次 1阶或者2阶的跳法。 a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1); b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2) c.由a\b假设可以得出总跳法为: f(n) = f(原创 2017-09-16 10:35:52 · 536 阅读 · 0 评论 -
字符串-最长公共子序列(LCS)问题
题目:求两个字符串的最大公共子序列(可以不连续)的长度,并输出这个子序列。 例如: 输入 googleg和elgoog 输出 goog 4 输入 abcda和adcba 输出 aba 3 而为了得到相同的子序列,需要根据回溯路径,写出匹配字串,如下图,绿色的部分就是路径回溯的结果。 代码如下: int SearchMaxLengthSequence(string s1,...原创 2017-10-11 21:13:40 · 3338 阅读 · 0 评论 -
二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移 代码:class Solution { public: b转载 2017-09-21 09:16:50 · 240 阅读 · 0 评论 -
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
//首先看十进制是如何做的: 5+7=12,三步走 //第一步:相加各位的值,不算进位,得到2。 //第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。//第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。//同样我们可以用三步走的方式计算二进制值相加: 5-101,7-111 第一步:相加各位的值,不算进位,得到010,二进制每转载 2017-09-15 09:04:49 · 338 阅读 · 0 评论 -
剑指offer--构建乘积数组
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法 B[i]的值可以看作下图的矩阵中每行的乘积。 下三角用连乘可以很容求得,上三角,从下向上也是连乘。 因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,...转载 2017-09-15 19:44:36 · 267 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
-1用二进制怎么表示? 原码是10000001 反码是11111110 补码是11111111 补码是计算机的一般表示方式大神代码:class Solution { public: int NumberOf1(int n) { int count = 0; while(n!= 0){ count++;原创 2017-09-14 20:13:29 · 272 阅读 · 0 评论 -
输入任意一正整数,输入该数的质数相乘的形式
#include<stdio.h> #include<iostream> int main() { int i = 2, sum, d; scanf_s("%d", &sum); printf("%d=", sum); while (i<sum) { if (sum%i != 0) i = i + 1;转载 2017-09-17 19:26:21 · 864 阅读 · 1 评论 -
输出任意字符串中最长的回文长度
如题,查找字符串中最长的回文,并输出该回文的长度。 例如: 输入:12ABBA 输出:4 输入:51233214 输出:6 #include<string> #include<iostream> #include <algorithm> using namespace std; ...转载 2017-09-26 09:21:52 · 946 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
本题可分为两道题,如下: 题目描述:求出1~n的整数中1出现的次数,例如1~13中包含1的数字有1、10、11、12、13。此时如果按照1出现的次数,那么将会有6次。如果是含有1的数字的个数,则为5个。下面将分别按照不同的方式来给出代码。1. 1~13中含有1的数字为5个int NumberOf1Between1AndN_Solution1(int n) { int bit = -1;原创 2017-09-27 22:00:32 · 362 阅读 · 0 评论 -
剑指offer--放苹果(递归)
题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 输入 每个用例包含二个整数M和N。0<=M,1<=N。 解题分析: 设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论, 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(...转载 2017-09-19 21:35:17 · 3655 阅读 · 0 评论 -
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
题目描述: 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 示例1: 输入:9876673 输出:37689#include<iostream> using namespace std; int main() { int n; int a[10]={0}; int num=0; cin>>n ; while(n)转载 2017-09-20 20:16:16 · 1657 阅读 · 0 评论 -
输入正整数A和正整数B,输出A和B的最大公约数和最小公倍数。
最小公倍数 = A * B / 最大公约数; 求解最大公约数的其中一中方法是辗转相除法。辗转相除法原理:如果a是任一整数而b是任一大于零的整数,则我们总能找到一整数q,使a=bq+r;并且a与b的最大公约数和b与r的最大公约数是相同的。由此可得链接:https://www.nowcoder.com/questionTerminal/22948c2cad484e0291350ab转载 2017-09-17 19:33:28 · 2003 阅读 · 0 评论 -
KMP算法
###对于主串长度为m,模式串长度为n的匹配,使用KMP算法复杂度为O(m+n) #include<iostream> #include<string> #include<vector> using namespace std; //首先构建next矩阵,用于确定重新匹配时模式串开始的位置 void get_nextval(const char* ptrn,...原创 2018-09-25 17:08:39 · 897 阅读 · 0 评论