![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程题
瓴翎玲
一点一滴积累,一步一步向前
展开
-
判断链表中是否有环
算法原创 2022-08-11 17:29:57 · 305 阅读 · 0 评论 -
删除链表的倒数第N个节点
算法原创 2022-08-11 17:22:28 · 159 阅读 · 0 评论 -
合并两个排序的链表
合并两个排序的链表原创 2022-06-06 18:58:44 · 107 阅读 · 0 评论 -
旋转数组中的最小数字
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。思路采用二分查找,left指向最左侧,right指向最右侧,mid指向中间数mid > left:最小值一定在右侧;mid < left:最小值一定在左侧范围一直缩小,当left与right相邻,则right为最小值注意:left.原创 2022-05-12 19:09:06 · 107 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。bool Find(int target, vector<vector<int> >.原创 2022-05-12 18:02:19 · 77 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
描述输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路从左到右依次寻找奇数保存奇数,其余数依次后移,腾出奇数位置每次奇数插入位置在排列好的奇数的末尾 vector<int> reOrderArray(vector<int>& array) { /* if(array == NULL ||原创 2022-05-12 17:49:26 · 172 阅读 · 0 评论 -
7.打印输入整数的每一位数字
分析:如果输入整数123过程:①123进入函数print(第1个),123>9,则进入print(第2个),执行 n / 10;②n = 12, 12 > 9,则进入print(第3个),执行 n / 10;③n = 1, 直接进入printf语句,并执行n % 10 = 1,则最开始打印出1;④再返回print(第2个),进入printf语句,并执行n % 10 ,此时n = 12, 则n % 10 = 2;⑤再返回print(第1个),进入printf语句,并执行n % 10原创 2021-01-23 21:48:05 · 1320 阅读 · 0 评论 -
9.斐波那契数列问题
//递归(效率低下)#include<stdio.h>int Fib(int n){ if (n <= 2) return 1; else return Fib(n - 1) + Fib(n - 2);}int main(){ int n = 0; scanf("%d", &n); int ret = Fib(n); printf("%d\n", ret); return 0;}//非递归#include<stdio.h>i原创 2021-01-23 22:03:52 · 97 阅读 · 0 评论 -
左旋转字符串
左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。方法一:分配新空间1、将s[n – strlen(s) - 1]的字符拷贝到新空间tmp[0 – strlen(s) - n + 1]上2、再将s[0 – n - 1]的字符拷贝到tmp[strlen(s) - n – strlen(s) - 1]上,返回tmp即可;char* reve原创 2021-06-03 17:22:52 · 136 阅读 · 0 评论 -
17.一组数组,奇数在前,偶数在后
类似于快排的算法:从左开始找,为奇数,则left+1;从后开始找,则right-1;若不满足,则前后两数交换void move_num(int arr[], int sz){ int left = 0; int right = sz - 1; while (left < right) { //从前往后找 while ((left < right) && (arr[left] % 2 == 1)) { left++; } //从后往前找 w原创 2021-02-24 21:30:21 · 107 阅读 · 0 评论 -
4.乘法口诀表
这类题主要找规律,看行列的关系#include<stdio.h>int main(){ int i = 0; int j = 0; int mul = 0; for (i = 1; i <= 9; i++) { for (j = 1; j <= 9; j++) { mul = j * i; if (i >= j) printf("%d*%d = %d ", j, i, mul); } printf("\n"); } ret原创 2021-01-19 17:23:10 · 195 阅读 · 0 评论 -
8.递归n阶乘类问题
1.递归和非递归分别实现求n的阶乘(不考虑溢出的问题)//递归#include<stdio.h>int Fac(int n){ if (n <= 1) return 1; else return n * Fac(n - 1);}int main(){ int n = 0; scanf("%d", &n); int ret = Fac(n); printf("%d\n", ret); return 0;}//非递归#include&l原创 2021-01-23 22:01:26 · 90 阅读 · 0 评论 -
12.实现一个对整形数组的冒泡排序
在数组有序的情况下也有优化:#include<stdio.h>//写一个冒泡排序算法,对整形数组进行排序void Bubble_sort(int *arr, int sz){ int i = 0; for (i = 0; i < sz; i++) { int flag = 1; //假设数组已经有序 int j = 0; for (j = 0; j < sz - 1 - i; j++) { int temp = 0; if (arr[j]原创 2021-01-28 16:27:31 · 241 阅读 · 0 评论 -
实现一个函数,将字符串中的每一个空格替换成%20
void replaceSpace(char *str,int length){ //1.算出空格的个数 int i = 0; int spcount = 0; for(i = 0; i < length; i++) { if(str[i] == ' ') spcount++; } //2.算出替换空格后新的长度和最后的位置 int newlen = length + 2*spcount;//%20是3个字符的位置 int pos = newlen - 1; //3.原创 2021-03-21 21:08:33 · 416 阅读 · 0 评论 -
1.最小公倍数 最大公约数
求两个数的最大公约数和最小公倍数最大公约数:利用辗转相除法最小公倍数:两数之积除以最大公约数#include<stdio.h>int main(){ int a = 0; int b = 0; int k = 0; int m = 0; int n = 0; scanf("%d %d",&a,&b); //把m n 值保存原始的输入的两个值,后面操作会改变 初始值大小 m = b; n = a; while(k = a % b) //直到k原创 2021-01-19 10:24:54 · 48 阅读 · 0 评论 -
3.素数
素数:只有1 与 本身两个因素,即质数从2—n的开平方的数之间,只要n % (2 - sqrt(n))中任意数最后为0,则n不是素数,反之则为素数#include<stdio.h>#include<math.h>int prime(int n) //判断是素数的函数{ int i = 0; int flag = 0; for (i = 2; i <= sqrt(n); i++) { if (n % i == 0) { flag = 1;原创 2021-01-19 14:52:24 · 65 阅读 · 0 评论 -
2.闰年
例如:打印1000—2000年之间的闰年要点:判断闰年的条件(year % 4 == 0) && (year % 100 != 0)或者(year % 400 == 0)#include<stdio.h>int main(){ int i = 0; for (i = 1000; i <= 2000; i++) { if ((i % 400 == 0) || ((i % 4 == 0) && (i % 100 != 0))) {原创 2021-01-19 10:31:21 · 44 阅读 · 0 评论 -
二叉树层序遍历
题目描述:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。输入root = [3,9,20,null,null,15,7]输出[[3],[9,20],[15,7]]解题思路:1.利用vector<vector>2.第一层vector:每一层数据个数第二层vector:每一层数据class Solution {public: vector<vector<int>> levelOrd原创 2022-02-27 20:16:50 · 594 阅读 · 0 评论 -
数组中最大的第K个元素
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array题目描述:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入:[3,2,1,5,6,4] 和 k = 2输出:5解题思路(此解法相对比较优化):利用priority_queue建立堆priority_que原创 2022-02-27 20:10:53 · 514 阅读 · 0 评论 -
用队列实现栈
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-stack-using-queues题目描述:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,原创 2022-02-27 19:51:49 · 78 阅读 · 0 评论 -
用栈实现队列
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-queue-using-stacks题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为原创 2022-02-27 19:46:33 · 239 阅读 · 0 评论 -
编程题——最小栈
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。示例 1:输原创 2022-02-23 23:01:24 · 97 阅读 · 0 评论 -
逆波兰表达式求值(后缀表达式求值)
题目描述:根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入:tokens = [“4”,“13”,原创 2022-02-23 22:22:54 · 196 阅读 · 0 评论 -
栈的压入、弹出序列
链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106来源:牛客网题目描述:压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。0<=pushV.length == popV.length <=1000-1000<=pushV[i]<=1000pu原创 2022-02-23 21:20:02 · 56 阅读 · 0 评论 -
顺时针打印矩阵
链接:https://www.nowcoder.com/questionTerminal/97e7a475d2a84eacb60ee545597a8407来源:牛客网题目描述:对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。测试样例:[[1,2],[3,4]],2,2返回:[1,2,4,3]解题思路:1.先记录左上角和右下角坐标(这两个坐标就描述了一原创 2022-02-03 15:08:12 · 100 阅读 · 0 评论 -
左右最值最大差
链接:https://www.nowcoder.com/questionTerminal/f5805cc389394cf69d89b29c0430ff27来源:牛客网题目描述:给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0…K],右部分A[K+1…N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?给定整数数组A和数组的大小n,请返回题目所求的答案。测试样例:[2,7,3,1,1]原创 2022-02-03 14:43:46 · 451 阅读 · 0 评论 -
最长公共子序列
链接:https://www.nowcoder.com/questionTerminal/9ae56e5bdf4f480387df781671db5172来源:牛客网我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。现在给你两个任意字符串(不包含空格),请帮忙计算它们的原创 2021-11-26 17:52:31 · 99 阅读 · 0 评论 -
编程题——养兔子
链接:https://www.nowcoder.com/questionTerminal/71d3849a19f04a1591c415964ac148f1来源:牛客网一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。输入描述:测试数据包括多组,每组一行,为整数n(1≤n≤90)。输出描述:对应输出第n天有几只兔子(假设没有兔子死亡现象)。示例1输入12输出12**解题思路:**其实就是斐波那契原创 2021-11-22 16:46:15 · 624 阅读 · 0 评论 -
收藏人列表
链接:https://www.nowcoder.com/questionTerminal/5973a31d58234b068fa1fe34f7290855来源:牛客网NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人列表。输入描述:输入包含多组数据。每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓原创 2021-11-22 16:33:15 · 67 阅读 · 0 评论 -
编程题——抄送列表
链接:https://www.nowcoder.com/questionTerminal/286af664b17243deb745f69138f8a800来源:牛客网NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。输入描述:输入有多组数据,每组数据有两行。第一行抄送列表,姓名之间用一个逗号隔开。如果原创 2021-11-21 15:45:40 · 121 阅读 · 0 评论 -
编程题——年会抽奖
链接:https://www.nowcoder.com/questionTerminal/610e6c0387a0401fb96675f58cda8559来源:牛客网今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?输入描述:输入包含多组数据,每组数据包含一个正整数n(原创 2021-11-21 14:49:08 · 386 阅读 · 0 评论 -
斐波那契凤尾
链接:https://www.nowcoder.com/questionTerminal/c0a4b917a15f40a49ca10532ab9019fb来源:牛客网NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。输入描述:输入有多组数据。每组数据一行,包含一个整数n (1≤n≤100000)。输出描述:对应每原创 2021-11-19 15:26:35 · 74 阅读 · 0 评论 -
编程题——淘宝网店
链接:https://www.nowcoder.com/questionTerminal/754921e9c98b43d1b2d70c227b844101来源:牛客网NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。现在给你一段时间区间,请你帮他计算总收益有多少。输入描述:输入包含多组数据。每组数据包含两个日期from和to (2000-01-01 ≤ from ≤ to ≤ 2999-12-31)。日期用三个正整数表示,用空格隔开:ye原创 2021-11-19 11:28:40 · 252 阅读 · 0 评论 -
编程题——分解因数
链接:https://www.nowcoder.com/questionTerminal/0f6976af36324f8bab1ea61e9e826ef5?orderByHotValue=0&commentTags=Java来源:牛客网题目描述:所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a = a1 × a2 × a3 × … × an,并且 1 < a1 ≤ a2 ≤ a3 ≤ … ≤ an。其中a1、a2、…、an均为素数。 先给出一个整数a,请输出分解后的因原创 2021-11-18 16:39:08 · 275 阅读 · 0 评论 -
编程题——因子个数
链接:https://www.nowcoder.com/questionTerminal/e8fb8f89f5d147ec92fd8ecfefe89b0d?answerType=1&f=discussion来源:牛客网一个正整数可以分解成一个或多个数组的积。例如36=223*3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。输入描述:输入包括多组数据。每组数据仅有一个整数n (2≤n≤10000原创 2021-11-17 11:10:45 · 1311 阅读 · 0 评论 -
最难的问题
链接:https://www.nowcoder.com/questionTerminal/9f6b8f6ec26d44cfb8fc8c664b0edb6b来源:牛客网题目描述:NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A 都分别替换成字母F),其他字符不 变,并且消息原文的所原创 2021-11-17 10:41:31 · 92 阅读 · 0 评论 -
找出字符串中第一个只出现一次的字符
描述找出字符串中第一个只出现一次的字符输入描述:输入几个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1输入:asdfasdfoaabb输出:o-1解题思路:法一:利用暴力法,设置双重循环挨个地对比#include<iostream>#include<string>using namespace std;//暴力法:利用双重循环对比char getFirstOneChar(const string st原创 2021-11-09 16:32:28 · 3178 阅读 · 1 评论 -
小易的升级之路
描述小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?输入描述:对于每组数据,第一行是两个整数n(1≤n<100000)表示怪原创 2021-11-09 15:09:17 · 49 阅读 · 0 评论 -
微信红包题
描述春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组 gifts 及它的大小 n ,请返回所求红包的金额。若没有金额超过总数的一半,返回0。示例1输入:[1,2,3,2,2],5返回值:2示例2输入:[1,1,2,2,3,3],6返回值:0解题思路:法一、利用map,遍历数组,计算每一个值出现的次数原创 2021-11-08 10:31:48 · 157 阅读 · 0 评论 -
扑克牌大小
描述扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王)????3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR基本规则:(1)输入每手牌可能是个原创 2021-11-02 15:20:27 · 798 阅读 · 0 评论