剑指offer
Bbeibeibear
这个作者很懒,什么都没留下…
展开
-
C语言:考试成绩排名
题目描述:学校里有N个同学,老师要按照同学们的考试成绩给大家进行排名,一共有多少种不同的排名可能(成绩相同的同学不计名字次序,算一种排名)。输入描述:每组数据第一行一个整数N,代表有N同学(1 <= N < 19)。输出描述:对于每组数据输出一个整数占一行,代表N个同学之间的排名有多少种可能。例子:输入23输出313举例:当N为2时,一共3种排名;当N为3时...原创 2020-02-25 22:29:13 · 3704 阅读 · 0 评论 -
C语言:剪绳子
题目:给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?**例如:**当绳子的长度为8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。这道题目时典型的动态规划题,自上而下分析问题、自下而上解决问题。同时也可以考虑使用贪婪...原创 2020-01-17 18:50:33 · 1803 阅读 · 0 评论 -
C语言:调整数组顺序使其奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。这道题目的思路和快速排序很相似,不同点在于交换时不用考虑奇数/偶数序列内部的大小关系。快速排序时设置了两个指针,一个初始化指向最左端,一个初始化指向最右端,这道题目也是一样的操作。在左指针指向的内容小于右指针指向内容的前提下,循环检测左端是否有偶数和右端是否有奇数,若有,则交...原创 2020-01-17 15:40:17 · 1049 阅读 · 0 评论 -
C语言:二进制中1的位数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1。因此,如果输入是9,则函数输出是2。核心思想:利用位运算,将原数字减去1再与原数字做与运算,等价于将原数字中最右边的1变为0。写了三个测试用例,分别检测函数在正数、负数、零的情况。#include<stdio.h>int NumberOf1(int a) { in...原创 2020-01-16 00:24:07 · 797 阅读 · 0 评论 -
C语言:替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成 “%20”。 例如,输入 “We are happy”, 则输出 “We%20are%20happy” 。这道题目有两种思路。如果可以建立新字符串,就可以依次比较原字符串中的数组,当某位字符不为空时,直接复制该字符;当某位字符为空,依次赋值:’%’、‘2’、‘0’。如果要在原字符串上进行修改,核心思想是从后往前寻找空格,进行替换,我采用的是...原创 2020-01-15 23:01:37 · 831 阅读 · 0 评论 -
C语言:机器人的运动范围
题目:地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每一次可以向左右上下移动一格,但不能进入行坐标和列坐标之和大于K的格子。例如,当k为18的时,机器人能够进入的方格(35,37),因为3+5+3+7=18.但是它不能进入方格(35,38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?这道题目,《剑指offer》当中也是用了回溯法,所以此题我也是用回溯法做的...原创 2020-01-15 20:55:13 · 1016 阅读 · 0 评论 -
C语言:矩阵中的路径
设计一个函数,判断在矩阵中是否存在一条包含某字符串所有字符的路径。路径可从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如:对于以下矩阵a b t fc f c sj d e h该矩阵包含bfce路径,但不包含abfb路径。#include<stdio.h>#include<std...原创 2020-01-12 23:50:50 · 723 阅读 · 3 评论 -
C语言:反转链表
思路:1.迭代:迭代法反转链表需要3个指针,一个是当前指针head,一个是它的前节点newhead,一个是它的后节点next。前节点是为了构造新的链,而后节点是为了与原来的链保持联系。newhead初始化为空,next初始化为头节点的next。令head指向newhead,然后使newhead指向这个新链。这时head与原来的链断开,next就发挥了作用,令head指向next,然后nex...原创 2019-12-16 19:37:20 · 1824 阅读 · 0 评论 -
C语言:链表中倒数第k个节点
一般思路:先遍历链表,计算出链表中的元素个数n,倒数第k个元素是正数第n-k+1个元素,因此再遍历一次链表即可。Linknode* FindthToTail(Linknode* head, unsigned int k){ if ((head == NULL) || (k = 0)) return NULL; int count = 0; Linknode* pointer = ...原创 2019-12-17 14:51:15 · 1480 阅读 · 0 评论 -
C语言:反转整个字符串,并将全部小写字母转换为大写字母
#include<stdio.h>#include<string.h>#define LENGTH 50void reverseStringUpper(char *p, char *q, int len) { if ((p == NULL) || (len == 0)) return; if (len == 1) { *p = *p - 32; re...原创 2019-12-29 22:31:03 · 2076 阅读 · 0 评论 -
C语言:数组中出现次数超过一半的数字
数组长度的计算int a[] = {1,1,1,1,1,1,1,1};int len = sizeof(a)/sizeof(int);sizeof(a)函数计算a的字节数,sizeof(int)函数计算int类型的字节数,因此两数相除才是数组a的长度。循环遍历数组与字符串不同,数组的遍历不能使用p++的方式,否则无法正确终止循环。例如:#include<stdio.h>...原创 2019-12-30 09:32:32 · 901 阅读 · 0 评论 -
C语言:二维数组中的查找
题目:在二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如:输入二维数组:1 2 8 92 4 9 124 7 10 136 8 11 15查找数字7,返回true;查找数字5,返回false;#include<stdio.h>...原创 2020-01-10 23:34:19 · 1602 阅读 · 0 评论 -
C语言:形参为指针时,实参的调用
在《剑指offer》中,有很多函数的参数都要用到指针(比如声明一个函数: int test(int* a);),在给这些函数传参时,有的直接传入就好(比如test(a);),有的却需要传入变量的地址(比如:test(&a)),那么如何区分呢?当需要对该变量中的值进行修改时,使用test(&a)可参考:C语言:反转整个字符串当不需要修改变量中的值时,使用test(a);可参...原创 2020-01-11 00:00:26 · 2302 阅读 · 4 评论 -
C语言:删除链表中的重复节点(二)
假设要求删除有序链表中的重复节点,重复节点一个不留。思路:一. 需要3个节点来标记位置,分别是当前节点current,它的前向节点pre和它的后继节点next;二. current节点从链表的头节点开始依次右移,pre初始化为空;三. 若current节点不为空,判断next节点是否为空、next节点的val与current的val是否相同;1. 若next节点不为空,且next节点的v...原创 2019-12-16 13:34:42 · 1665 阅读 · 1 评论 -
C语言:删除链表中的重复节点(一)
假设要将重复的节点删除至只剩一个。思路:设置两个指针,一个先指向头节点(假设为pointer指针),一个指向头节点的next(假设为s指针)。比较pointer和s的val:pointer->val 等于 s->val:判断s的next是否为空:a. s的next不为空用s->next的val覆盖s的val,然后删除s->nextb. s的next为空(即...原创 2019-12-15 20:51:46 · 2417 阅读 · 2 评论 -
C语言:在O(1)时间内删除链表节点
假设要删除的节点为tobedeteleted思路:按顺序遍历至tobedeteleted的前一个节点,然后使它指向tobedeteleted的next,再将tobedeteleted的空间释放;(此方法的时间复杂度为O(n),不符合题意)考虑tobedeteleted的位置:(1). tobedeteleted的next不为空:用其next上的值覆盖tobedeteleted上的...原创 2019-12-15 16:57:22 · 230 阅读 · 0 评论 -
C语言:从尾到头打印链表
双12买了本《剑指offer》,里面好多题目之前都做过,但仅限于做出来,当时没有思考太多,很多都是直接调类(用的java)。今天开始重新学习,想着用C再实现一遍,这次要考虑更深层的东西,比如时间复杂度这些。言归正传,再次学习还是从链表开始,第一道关于链表的题目是从尾到头打印链表。看到这道题,我第一反应想的是:把链表反转,然后再依次输出每个结点的值就好了,正好还有一道链表反转的题,一次能完成两个呢...原创 2019-12-15 00:38:26 · 1399 阅读 · 0 评论