剑指offer
oldwang1999
陕西科技大学第一诸葛亮
展开
-
打印从1到最大的n位数
当我们看到这道题的时候,我们会首先想到找到最大的n位数,然后从1开始逐个打印;也就是下边的代码:void printonetomax1(int n){ int num = 1; int i = 0; for (i = 0; i < n; i++) { num = num * 10; } for (i = 1; i <= num; i++) { prin...原创 2018-09-30 23:43:01 · 200 阅读 · 0 评论 -
剪绳子
解决这个问题,我们有两种办法:(1)动态规划(2)贪婪算法。 动态规划: 时间复杂度为O(n^2)空间复杂度O(n) 贪婪算法:时间复杂度为O(1)空间复杂度O(1)1.动态规划 当绳子长度为1和0时,不能被剪; 当绳子长度为2时,只能剪成1和1,所以f(2)=1; 当绳子长度为3时,只能剪成1和3,所以f(3)=2...原创 2018-09-28 00:21:08 · 350 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面。
题目解析:这道题是一维数组的考察,解这道题需要数组和函数的知识;题目很明显,是将所有的奇数放在数组的前面,并没有顺序要求;如果数组第一个数为偶数并且最后一个数为奇数,那么直接交换,得到奇数在前,偶数在后;第一个不为偶数(为奇数)或者最后一个不为奇数(为偶数),分别往里走找偶数和奇数,直到找到前边偶数后边奇数,然后交换。void Swap(int arr[], int size){...原创 2018-04-13 23:41:17 · 282 阅读 · 0 评论 -
删除链表中的节点
链表:typedef int DataType;typedef struct Node{ DataType data; struct Node* next;}Node, *pNode, List, *pList; 我们知道在链表中删除一个节点,最原始的方法就是讲整个链表遍历一遍,遇到需要删除的就将它删除就可以,但是遍历一遍链表,其时间复杂度...原创 2018-10-06 23:38:38 · 259 阅读 · 0 评论 -
替换空格
首先,拿到题目,我们可以遍历整个字符串,遇到空格用%20替换,只不过字符串的长度就会增加;我们也可以创建新的字符串在新的字符串上替换,那么我们就应该有足够多的空间。 第一种解法:(时间复杂度为O(n^2)) 假设字符串的长度为n,对于每个空格字符,都需要将后边的往后移动,如果有n个空...原创 2018-09-28 22:44:35 · 1189 阅读 · 0 评论 -
位运算
位运算就是将一个数字用二进制的方式表示出来,对每一位上的0、1进行的运算。位运算有五种:与、或,异或、左移、右移。左移运算符:m<<n,表示把m左移n位。例:00010101<<2=01010100右移运算符:m>>n,表示把m右移n位。例:00010101>>2=00000101题目一 当我们看到题目,很快...原创 2018-10-18 09:37:35 · 233 阅读 · 0 评论 -
数值的整数次方
我们看到这个题目时候,第一时间就会写出如下的代码:double Power(double base, int exponent){ int i = 0; double result = 1.0; for (i = 1; i <= exponent; i++) { result *= base; } return result;}不过很遗憾,这样的写法虽然也...原创 2018-09-29 11:27:29 · 172 阅读 · 0 评论