C语言编程笔记
风一样的航哥
导航/控制/算法
展开
-
力扣题目之分发糖果
135. 分发糖果 难度困难365 老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 示例1: 输入: [1,0,2] 输出: 5 解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。 示例2: 输入: [1,2,2] 输出: 4 解释: 你可以分别给这...原创 2020-12-24 14:31:27 · 534 阅读 · 0 评论 -
子数组最大乘积
题目描述 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。 示例1 输入 复制 [-2.5,4,0,3,0.5,8,-1] 返回值 复制 12.00000 解法:行和列都是自身,然后构建一个累乘的网格,很轻易的就能找到网格的递推关系,于是直接上代码。 class Solution { public: double maxProduct(vector<double> arr) { if(arr.size()=原创 2020-12-23 19:46:03 · 159 阅读 · 1 评论 -
最长公共子序列
题目描述 给定两个字符串str1和str2,输出连个字符串的最长公共子序列。如过最长公共子序列为空,则输出-1。 示例1 输入 复制 "1A2C3D4B56","B1D23CA45B6A" 返回值 复制 "123456" 说明 "123456"和“12C4B6”都是最长公共子序列,任意输出一个。 解答思路:判断最长公共子序列的方法如下 if word_a[i]==word_b[j] cell[i][j]=cell[i][j]+1; else cell[...原创 2020-12-23 19:02:46 · 112 阅读 · 0 评论 -
最长公共字串问题
题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 示例1 输入 复制 "1AB2345CD","12345EF" 返回值 复制 "2345" 备注: 1 \leq |str_1|, |str_2| \leq 5\,0001≤∣str1∣,∣str2∣≤5000 解答:最长公共字串的问题,转换为一个二维网格问题,基本思路为: if word_a[i]==word_b[j] cell[i][j]=cell[i..原创 2020-12-23 15:38:35 · 132 阅读 · 0 评论 -
动态规划最简单的例子:给定一个数组arr,返回子数组的最大累加和
时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 256M,其他语言512M热度指数:12814 本题知识点:分治动态规划 算法知识视频讲解 题目描述 给定一个数组arr,返回子数组的最大累加和 例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12. [要求] 时间复杂度为O(n)O(n),空间复杂度为O(1)O(1) 示例1 输入 复制 [1, -2, 3, 5,...原创 2020-12-22 20:40:44 · 656 阅读 · 1 评论 -
牛客网的找到字符串的最长无重复子串问题 C++
题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。 示例1 输入 复制 [2,3,4,5] 返回值 复制 4 示例2 输入 复制 [2,2,3,4,3] 返回值 复制 3 备注: 1 \leq n \leq 10^51≤n≤105 解答:不管是字符串还是数字,都是一样的,只要单个数字没有超过int的表示范围,基本就是简单题目。 class Solution { public: /** *原创 2020-12-22 20:08:30 · 240 阅读 · 0 评论 -
牛客网的字符串变形C++
题目描述 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。 输入描述: 给定一个字符串s以及它的长度n(1≤n≤500) 返回值描述: 请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。 示例1 输入 复制 "This i原创 2020-12-21 23:17:34 · 266 阅读 · 0 评论 -
牛客网的字符串大数加法C++解答
题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 (字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成) 示例1 输入 复制 "1","99" 返回值 复制 "100" 说明 1+99=100 C++解答: class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @para原创 2020-12-21 21:57:48 · 288 阅读 · 0 评论 -
linux 编译C语言程序万能makefile文件
一般单个文件使用 gcc 来进行编译,但是如果文件多啦,想一次编译完成怎办呢? 一种解决方案是使用makefile文件,下面给出一个万能的文件格式: Makefile SOURCE = $(wildcard *.c) TARGETS = $(patsubst %.c, %,$(SOURCE)) CC =gcc CFLAGS = -Wall -g all:$(TARGETS) $(TARGETS):%:%.c $(CC) $< $(CFLAGS) -o $@ .PHONY:clean原创 2020-12-10 15:55:45 · 387 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 基本思路是比较计数,依次从头遍历这个数组,当发现有和这个元素相等的时候,计数器++,当发现计数器大于一半的时候,表示找到了,立刻返回这个数,否则继续遍历。无解的时候情况最差,最差时间复杂度为O(n^2),当存在解的时候,会比较快跳出循环(取决于解的位置,最差为n*n/2),最快为O(n原创 2020-09-29 23:31:54 · 352 阅读 · 1 评论 -
C语言链表计算大数相加
题目描述: 给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 来源:力扣(LeetCode) 链接:htt...原创 2020-09-27 23:12:07 · 1233 阅读 · 0 评论 -
两种方法使用C语言的指针函数返回一个数组
* *Toreturntheintegerarrayfromthefunction,youshould: *-Storethesizeofthearraytobereturnedintheresult_countvariable *-Allocatethearraystaticallyordynamically * *Forexample, *int*return_integer_array_usi...原创 2020-08-10 19:07:15 · 1174 阅读 · 1 评论