
C语言
majinbo111
这个作者很懒,什么都没留下…
展开
-
Leetcode 147. 对链表进行插入排序 & Leetcode 148. 排序链表
https://leetcode-cn.com/problems/insertion-sort-list/初版复杂度如插入排序,最坏可能为O(n^2)/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* insertionSortList(struct ListNode* head.原创 2021-06-26 23:28:10 · 136 阅读 · 0 评论 -
串的模式匹配算法
串的匹配的应用场景例如:查找子串问题说一篇文章里搜索一条词句论文查重匹配算法介绍一般都是这两种算法法来匹配字符串,BF算法与KMP算法。BF算法原理:匹配串与主串按字符两两匹配;相同时,继续按字符匹配;不相同时,主串回溯到匹配开始加1的位置,匹配串回溯到起始位置。重复以上步骤,完整的匹配到子串,则表示成功,反之失败。废话不多说,直接上代码。#include <stdio.h>#include <string.h>int deal_pos (int pos原创 2021-05-09 17:10:27 · 718 阅读 · 0 评论 -
解决顺序表实现队列的假溢出的循环队列
循环队列的参考视频:https://www.bilibili.com/video/BV1nJ411V7bd?p=60问题:什么是顺序队列的假溢出?从队首倒到队尾完全占用了分配的空间,是溢出。相反,队尾元素占用了分配的最后一个空间,队首元素还是占有的不是第一个分配的空间,相当于队列对外是满的,但是内部空间利用不充分,还有剩余,此时就称为假溢出。解决假上溢的方法-引入循环队列把stack[0] 接在queue[MAXQSIZE-1]之后,若rear+1 == MAXQSIZE,则令rear=0;解.原创 2021-05-05 16:17:29 · 3015 阅读 · 0 评论 -
10进制转换为2~16进制
10进制数n转换为 base(2、8、18)进制的转换法则:除以base倒取余。简单原理:n=(n/base) * base + n%base (此处的除法为整除)/* * @Author: jinbo.ma * @Mail: 18710648068@163.com * @Date: 2021-04-30 16:07:07 * @LastEditTime: 2021-04-30 17:23:48 */#include <stdio.h>#include <stdlib.原创 2021-04-30 17:26:47 · 624 阅读 · 1 评论 -
复数计算 [(8+6i)*(4+3i)]/[(8+6i)+(4+3i)]= ?
计算复数 [(8+6i)*(4+3i)]/[(8+6i)+(4+3i)]= ?/* * @Author: jinbo.ma * @Mail: 18710648068@163.com * @Date: 2021-03-11 15:02:21 * @LastEditTime: 2021-03-13 16:50:20 */#include <stdio.h>typedef struct complex { double real, imag;} complex;voi原创 2021-03-13 16:51:40 · 874 阅读 · 0 评论 -
拓扑排序(leetcode 207、210)
拓扑排序有向无环图有向无环图:无环的有向图,简称DAG(Directed Acycline Graph)。有向无环图的应用有向无环图常用来描述一个工程或系统的进行过程(通常把计划、施工、生产、程序流程等当成一个工程)。一个工程可以分为若干个子工程,只要完成了这些子工程(活动),就可以使得整个工程完成。有向无环图分为两种表示方法,AOV网与AOE网。AOV网 (拓扑排序)用一个有向图表示一个工程的各个工程及其互相制约关系,其中顶点表示活动,弧表示活动之间的优先制约关系,称这种有向图为顶点表示活原创 2021-01-14 12:07:54 · 574 阅读 · 0 评论 -
leetcode 830. 较大分组的位置
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/positions-of-large-groups著作权归领扣网络所有在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下.原创 2021-01-05 11:34:47 · 153 阅读 · 0 评论 -
动态规划-捞鱼问题
题目3个桶,5条鱼,每个桶中可放置0~3条鱼,请问共有排列有多少种 ?分析过程递归及动态规划代码#include <stdio.h>#include <stdlib.h>/************************************************ * 递归方式求剩余bucket个桶放置剩余fish条鱼的总分配方法 * ********************************************** * @param int bu原创 2020-12-29 18:13:35 · 353 阅读 · 0 评论 -
226. 翻转二叉树 & 剑指 Offer 27. 二叉树的镜像
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/invert-binary-tree著作权归领扣网络所有题目翻转一棵二叉树。备注:本题与 剑指 Offer 27. 二叉树的镜像 相同示例:输入: 4 / \ 2 7 / \ / \ 1 3 6 9输出: 4 / \ 7 2 / \ / \ 9 .原创 2020-12-29 15:34:38 · 144 阅读 · 0 评论 -
leetcode 198. 打家劫舍
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/house-robber著作权归领扣网络所有题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4 解释.原创 2020-12-28 16:46:13 · 211 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润 & 121. 买卖股票的最佳时机
题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof著作权归领扣网络所有。假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6原创 2020-12-28 14:31:35 · 180 阅读 · 0 评论 -
leetcode 1235. 规划兼职工作
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-profit-in-job-scheduling著作权归领扣网络所有。你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得.原创 2020-12-24 18:24:50 · 350 阅读 · 1 评论 -
leetcode 201. 数字范围按位与
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range著作权归领扣网络所有。给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0方法1:找到公共前缀int rangeBitwiseAnd(int.原创 2020-12-23 16:35:07 · 172 阅读 · 0 评论 -
排序算法-计数排序
计数排序-非比较排序计数排序是一个稳定的排序算法,输入元素是n个 0到k的直接的整数时,时间复杂度是O(n),空间复杂度也是O(n),其排序速度是超过任何比较算法的,但是运用场景比较局限,只有当k不是很大,并且序列比较集中时,计数排序是一个很有效的排序算法。#include <stdio.h>#include <stdlib.h>void print_array(int *a, int len) { for (int i = 0; i < len; i++)原创 2020-12-22 17:46:18 · 174 阅读 · 0 评论 -
排序算法-堆排序
引用&推荐:https://www.bilibili.com/video/BV1Eb41147dK堆定义堆,是通常是一个可以被看做一棵完全二叉树的数组对象。堆特性堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。完全二叉树的数组表示时的特性完全二叉树可以使用数组表示,树的节点层次遍历存放到数组,则会有如下关系:若父节点表示为 i,则子节点可以表示为:left = 2 * i + 1;right = 2 * i + 2; 逆推,如子节点为i,则父.原创 2020-12-21 15:43:09 · 169 阅读 · 0 评论 -
排序算法-快速排序
快速排序-比较交换类排序算法复杂度:最好=O(nlog n) 最差=O(n2) 平均=O(nlog n)算法稳定性:不稳定算法思想:分而治之#include <stdio.h>void print_array(int *a, int len) { for (int i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n");}int getIndex(int *a, int原创 2020-12-18 17:00:49 · 121 阅读 · 1 评论 -
排序算法-希尔排序
希尔排序-不稳定插入排序时间复杂度:平均=O(n1.3) 最坏=O(n2) 最好=O(n)#include <stdio.h>void print_array(int *a, int size) { for (int i = 0; i < size; i++) { printf("%d ", a[i]); } printf("\n");}/** * 希尔排序-不稳定插入类排序 */void shellSort(int *a原创 2020-12-18 15:31:16 · 131 阅读 · 1 评论 -
排序算法-归并排序
#include <stdio.h>#include <stdlib.h>/**没有利用空间的合并*/void insertMerge(int *a, int left, int mid, int right) { int i = mid+1, j, t; while ( i <= right) { // 把右边的值插入排序待左边 t = a[i]; j = i; while ( j > left原创 2020-12-17 18:24:59 · 107 阅读 · 0 评论 -
排序算法-选择排序
#include <stdio.h>void print_array(int *a, int size) { for (int i = 0; i < size; i++) { printf("%d ", a[i]); } printf("\n");}void selectSort(int *a, int size) { int t; while ( --size ) { //从右到左,从大到小 fo原创 2020-12-16 16:19:49 · 107 阅读 · 0 评论 -
leetcode 739. 每日温度
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/daily-temperatures著作权归领扣网络所有。题目请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0.原创 2020-12-08 15:17:41 · 241 阅读 · 0 评论 -
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array著作权归领扣网络所有。给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:.原创 2020-12-01 13:54:18 · 112 阅读 · 0 评论 -
leetcode 88. 合并两个有序数组
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-sorted-array著作权归领扣网络所有。给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = .原创 2020-11-30 18:24:38 · 161 阅读 · 1 评论 -
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof著作权归领扣网络所有。请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的原创 2020-11-07 14:34:31 · 226 阅读 · 0 评论 -
leetcode 剑指 Offer 11. 旋转数组的最小数字 与 154. 寻找旋转排序数组中的最小值 II
寻找旋转排序数组中的最小值 II来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii著作权归领扣网络所有假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2原创 2020-11-07 14:05:25 · 688 阅读 · 1 评论 -
leetcode 62. 不同路径
62. 不同路径来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths著作权归领扣网络所有。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。原创 2020-11-06 18:06:42 · 696 阅读 · 1 评论 -
leetcode 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof著作权归领扣网络所有。输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <=原创 2020-11-05 23:43:20 · 135 阅读 · 0 评论 -
Leetcode 剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof著作权归领扣网络所有。找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2原创 2020-11-04 16:42:51 · 452 阅读 · 0 评论 -
leetcode 剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/著作权归领扣网络所有。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000代码:$str = "We are happy.";var_d原创 2020-11-04 16:16:32 · 91 阅读 · 0 评论 -
leetcode 面试题 02.02. 返回倒数第 k 个节点
返回倒数第 k 个节点实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2020-11-03 10:55:54 · 173 阅读 · 0 评论 -
leetcode 61. 旋转链表
https://leetcode-cn.com/problems/rotate-list/leetcode 61. 旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 ..原创 2020-11-02 15:18:44 · 117 阅读 · 0 评论 -
Leetcode 剑指 Offer 18. 删除链表的节点
https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: h.原创 2020-11-01 22:53:13 · 111 阅读 · 2 评论 -
leetcode 一年中的第几天
一年中的第几天https://leetcode-cn.com/problems/day-of-the-year///判断平年还是闰年int isLearYear(int year) { return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1 : 0;}int dayOfYear(char * date){ //存放当前月之前的天数和 int before_month_days[2原创 2020-10-15 00:19:05 · 193 阅读 · 0 评论 -
leetcode 数组
242. 有效的字母异位词https://leetcode-cn.com/problems/valid-anagram///时间复杂度 O(n)//空间复杂度 O(1)#define N 26bool isAnagram(char * s, char * t){ int flag[N] = {0}; //额外恒定辅助空间 int slen = strlen(s), tlen = strlen(t); if (slen != tlen) { return原创 2020-10-10 16:53:11 · 90 阅读 · 0 评论 -
leecode 链表
剑指 Offer 24. 反转链表https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/虚加前缀头/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head原创 2020-10-10 16:48:39 · 146 阅读 · 1 评论 -
排序算法-插入排序
插入排序#include <stdio.h>void insertSort(int *a, int size) { int i, j, t; for (i = 1; i < size; i++) { //从下标为1开始,仅有一个元素无需比较 t = a[i]; j = i; while ( j > 0 && t < a[j-1]) { //从末尾开始比较 a[j] =原创 2020-09-24 10:42:37 · 101 阅读 · 1 评论 -
斐波那契数列求第N项递归改进
一般递归思路:int fib(int n) { if ( 2 > n) { return n; } return fib(n-1) + fib(n-2);}展开递归计算过程,如下为求第fib(5)的递归过程。如上发现好多重复计算过程,时间与空间的消耗也是必然的。颠倒计算方向,由自顶而下递归,为自底而上迭代(动态规划)算法描述为:int fib(int n) { int f = 0, g = 1; while( --n >原创 2020-09-02 11:03:27 · 397 阅读 · 0 评论 -
LeetCode 1343. 大小为 K 且平均值大于等于阈值的子数组数目
题目: 大小为 K 且平均值大于等于阈值的子数组数目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold给你一个整数数组 arr 和两个整数 k 和 threshold 。请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。示例 1:输入:arr = [2,2,2,2,5原创 2020-05-28 02:10:42 · 405 阅读 · 0 评论 -
数组元素被第一个元素整除的解决过程
问题返回一个数组每个元素都整除第一个元素的数组结果思考过程输入数组的每个元素是什么类型?输出数组的每个元素又是什么类型?数组的第一个元素为0怎么处理?数组元素的第一个元素为1怎么处理?输出数组是整除,还是保留小数位?应用场景是什么?最终要达到的目的?计算运行耗时多少?占用多大的内存空间?测试用例的准备?最终搞清楚了情况,然后再动手,比如以下假定:应用场景不复杂,输入数组为不超过10个的整数,为0的时候不处理,除法为整除,结果不保留小数位解决#include <std原创 2020-05-26 23:32:39 · 318 阅读 · 0 评论 -
内存分配
首先介绍下程序的内存分配原则转载 2014-09-17 09:44:42 · 436 阅读 · 0 评论 -
C语言setbuf 函数的介绍
详细资料请审阅:C语言setbuf()函数:把缓冲区与流相关联原创 2015-02-25 16:30:27 · 2783 阅读 · 1 评论