摘要:
算法岗,一共两道编程题,题目具体如下: 第一题: # 给你A数组,询问ΣΣA[gcd(i,j)],1<=i<=n,1<=j<=m# 输入:# 每行有四个整数,N,n,m,p,其中N表示A数组长度,n,m,p为参数;对于A数组如下得出:## A[1]=p,A[x]=(A[x-1]+153)%p## 数 阅读全文
摘要:
一. 数字 转 char*型 1.sprintf函数(适合C和C++) 示例: sprintf()函数的功能非常强大,此处只是将int型数字转换成字符串,更多的介绍可见:https://blog.csdn.net/sjf331/article/details/339254 二.数字 转 string 阅读全文
摘要:
题目描述: 给定三个整数X,Y,Z,要求进行若干次操作使得X,Y,Z相等,操作有两种: 1.从X,Y,Z中选择两个数都加1。 2.从X,Y,Z中选择一个数加2。 求最少需要多少次操作。 题目思路: 1.对X,Y,Z三个数进行排序,此处用的是降序排序。假设排序完之后X>Y>Z,如果Y-Z是奇数的话,那 阅读全文
摘要:
从一堆无序的数中(共n个数)找到最小的K个数,这也算是一道比较经典的题目了,关于这道题目的解法,一般有几种: 方法1:先对所有的数据进行排序,然后直接找出前K个数来,即最小的K个数。时间复杂度为O(N*logN)。 方法2:采用类似快排的思想,只要找到第K小的数值的位置的话,那么数组中的前K个数值一 阅读全文
摘要:
给定一个数组A,要求找到数组A中第K大的数字。对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字。该方法的时间复杂度为O(N*logN) 方法2: 利用简单选择排序法的思想,每次通过比较选出最大的数字来,比较上K次就能找出第K大的数字来。 阅读全文
摘要:
C++中函数的形参如果为数组的话,那么进行实参传递时,实参实际上换转化成指针。参考下面的例子: 运行结果为: 通过上面的结果可知, 1.数组a的本质就可以看成是一种指向数组首地址的指针。 2.在实参传递的过程中,传给fun函数的实际上是一个指针,这个指针存储的地址与a的首地址相同,所以改变这个指针指 阅读全文
摘要:
我在之前的一篇文章中,写的是关于全排列问题的小结(http://www.cnblogs.com/wangkundentisy/p/8570082.html),这篇文章主要介绍的为字符串的组合问题。首先需要弄清楚排列和组合的区别,对于字符串"abc",它的全排列包括:abc、acb、bac、bca、c 阅读全文
摘要:
具体的题目大意和参考思路在此处不详述(见《剑指offer》),实质就是在中序遍历的过程中调整指针的指向,关于中序遍历有递归和非递归两种操作,所以此处也用了两种方法。 方法1(递归法): 代码如下: 关于递归法此处有几点需要注意: 1.实际整个过程中需要记录的节点只有一个:即在遍历过程中当前节点的前一 阅读全文
摘要:
在使用递归函数时,如果函数的形参带来的信息比较明确的的话,例如形参为int *a,int start,int end三个参数的话,分别表示数组a和a的起始小标、终止下标;这样递归的时候用起来会比较方便。例如: 但在有的时候,题目给定的函数的参数可能信息不是很明确,例如只给你一个数组或者一个vecto 阅读全文
摘要:
对于层次遍历二叉树,我们应该都挺熟悉。但是对于不同类型的返回值的函数,有些处理手段也不同。 1.例如,返回值是void型的话,此时如果打印二叉树的各个节点的值的话,直接在函数内部实现即可,而且遇到空指针时,可以在开头直接判断,类似于: 2.但是如果返回时是一个数组或者是一个vector的话,此时如果 阅读全文