- 博客(311)
- 资源 (1)
- 收藏
- 关注
原创 《力扣刷题》 按奇偶排序数组
题目描述若存在一个整数数组 nums,要求将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素,返回满足此条件的任一数组作为答案 为什么要说返回任一数组呢!很容易想肯定不止是一种情况!!![3,1,2,4] 的输入可能得到的输出有 [2,4,1,3] [2,4,3,1] [4,2,1,3] [4,2,3,1] 四种C 语言具体代码实现作者的想法是两次遍历!!! 具体实现过程是第一次筛选偶数,第二次筛选奇数#inclu...
2022-04-28 18:36:36
559
原创 《力扣刷题》 排列硬币
题目描述若存在 n 枚硬币,并计划将它们按阶梯状排列,对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币,阶梯的最后一行可能是不完整的;若给你一个数字 n ,要求我们计算并返回可形成完整阶梯行的总行数如下图,硬币是按阶梯状排列的,其完整阶梯行的数目为 3C 语言具体代码实现先看看作者本人的想法:用一个循环来控制阶梯每一行可排列的数目,用 sum变量统计当前总硬币数并且与 n比较!!!#include <stdio.h>int arrangeCoins(
2022-04-19 23:08:44
535
原创 《力扣刷题》 字符串中的单词数
题目描述存在一个字符数组,要求我们将其中的单词数量返回计算字符串中单词的数量,就等同于计数单词的第一个下标的个数,因此,我们只需要遍历整个字符串,统计每个单词的第一个下标的数目即可满足单词的第一个下标有以下两个条件: 1. 该下标对应的字符不为空格 2. 该下标为初始下标或者该下标的前下标对应的字符为空格C 语言具体代码实现此处使用了题目描述中的原地法!!! 从字符数组的第一个元素开始遍历,查找所有单词的第一个下标的个...
2022-04-19 13:03:17
470
原创 《力扣刷题》数据结构(赎金信)
题目描述若存在两个字符串:ransomNote 和 magazine ,要求判断 ransomNote 能不能由 magazine 里面的字符构成如果可以,返回 true ;否则返回 false重点:magazine 中的每个字符只能在 ransomNote 中使用一次C 语言具体代码实现作者本人想法!!!bool canConstruct(char *ransomNote, char *magazine){ if(strlen(ransomNote) > strl.
2022-04-12 23:40:45
513
原创 《力扣刷题》数据结构(有效的字母异位词)
题目描述若存在两个字符串 s 和 t ,要求编写一个函数来判断 t 是否是 s 的字母异位词字母异位词:s 和 t中每个字符出现的次数都相同C 语言具体代码实现作者想法如下!!!#include <stdio.h>#include <stdlib.h>#include <string.h>int cmp(const void *_a, const void *_b){ char *a = (char*)_a; char *b.
2022-04-11 23:39:47
384
原创 《力扣刷题》数据结构(字符串中的第一个唯一字符)
题目描述若存在一个字符串 s,要求找到它的第一个不重复的字符,并返回它的索引;如果不存在,则返回 -1题目来源C 语言具体代码实现作者本人想法!!!#include <stdio.h>#include <string.h>int firstUniqChar(char *s){ for(int i = 0; i < strlen(s); i++){ int j = 0; for(; j < strlen(s); j++
2022-04-10 23:58:30
967
原创 《力扣刷题》数据结构(杨辉三角)
题目描述若存在一个非负整数 numRows,要求生成「杨辉三角」的前 numRows 行在「杨辉三角」中,每个数是它左上方和右上方的数的和C 语言具体代码实现作者本人想法!!!#include <stdio.h>#include <stdlib.h>int **array; // 二维数组 int numRows = 5; // 五行杨辉三角 void generate(){ array[0][0] = 1; // 第一行元素 array
2022-04-08 23:26:29
679
原创 《力扣刷题》数据结构(重塑矩阵)
题目描述在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同的 r x c 的新矩阵若存在一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充如果给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵C 语言具体代码实现作者本人的方法是先用一维数组保存二维数组,然后再还原!
2022-04-07 12:08:36
174
2
原创 《力扣刷题》 二分查找(x 的平方根)
题目描述若存在一个非负整数 x,计算并返回 x 的算术平方根由于返回类型是整数,结果只保留整数部分,小数部分将被舍去C 语言具体代码实现二分查找的具体过程如下!!!#include <stdio.h> int mySqrt(int x){ long left = 1, right = x; // 设置左右边界 while(left <= right){ long mid = (left+right)/2; lon
2022-04-06 22:19:15
717
原创 《力扣刷题》 移动零
题目描述若存在一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序C 语言具体代码实现作者无想法!!!借鉴官方的方法:双指针使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部,右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移#include <stdio.h>void swap(int *a, int *b){ int t = *a; *a =...
2022-04-05 21:12:52
252
原创 《力扣刷题》 二分查找(两个数组间的距离值)
题目描述若存在两个整数数组 arr1,arr2 和一个整数 d ,需要我们返回两个数组之间的距离值「距离值」定义为符合此距离要求的元素数目:对于元素,不存在任何元素满足 C 语言具体代码实现先看看作者本人的想法:模拟枚举!!! 首先假设 arr1 中的所有元素都符合要求,然后利用两个循环来筛选掉不符合的元素#include <stdio.h>#include <math.h>int findTheDistanceValue(in...
2022-04-05 18:21:21
254
原创 《力扣刷题》 二分查找(有效的完全平方数)
题目描述若存在一个正整数 num ,需要我们编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 falseC 语言具体代码实现先看作者本人的想法:暴力枚举法!!! 简单来讲,从(i —— 1 直到 num)开始遍历,如果满足 ,那么返回 ture,否则返回 false#include <stdio.h>bool isPerfectSquare(int num){ // 暴力枚举 for(long int i = 1;...
2022-04-05 14:25:53
168
原创 《力扣刷题》 数据结构入门(买卖股票的最佳时机)
题目描述若存在一个数组 prices ,它的第个元素表示一支给定股票第 天的价格,需要我们在某天买入股票,并在未来的一天卖出股票,求这笔交易的最大利润(如果不能获得利润,则返回 0)C 语言具体代码实现先看看作者本人的想法!!!还是一个土包子,暴力破解法 使用两个循环遍历数组中的任意一组元素,并将后一项减前一项的最大值保存到变量 max 中(也就是最大利润) 时间复杂度: 空间复杂度:#include <stdio....
2022-04-05 13:37:01
1015
原创 《力扣刷题》 数据结构入门(两个数组的交集 II)
题目描述若存在两个整数数组 nums1 和 nums2 ,需要我们以数组形式返回两数组的交集特别注意!!!返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(并以最小出现次数输出),我觉得说到这里还是有一部分人不能理解,那么我举几个例子若存在,那么此处是不是应该返回呢?因为符合 2 这个元素在两个数组中出现的次数都为 2 这个条件;但是此处还有一个限制条件(以最小出现次数输出),也就是说此处可以看成两个 2 元素,分别出现 1 次,...
2022-04-05 12:36:52
950
原创 《力扣刷题》 轮转数组
题目描述若存在一个数组,将数组中的元素向右轮转 k 个位置(其中 k 是非负数)关于轮转的概念如下我举一个例子 如存在数组 ,我们向右轮转 1 个单位,则轮转后的数组为C 语言具体代码实现这道题我刚开始是没有思路的,于是借鉴了官方的方法:使用额外的数组!!! 简单来讲,对于在原数组中位于索引 0 的元素,当我们向右轮转 k 个单位,那么这个元素应该被保存在额外数组索引为 0+k 位置;但是这样并不完善,对于原数组比较靠后的元素,如中,我们向右轮转 1...
2022-04-04 23:02:57
476
1
原创 《力扣刷题》 有序数组的平方
题目描述若存在一个按非递减顺序排列的整数数组 nums,要求返回每个数字的平方组成的新数组(使其仍为非递减顺序)C 语言具体代码实现先谈一下作者自己的想法!!!(直接排序) 将数组的每一个数字平方后保存在原位置,然后利用 qsort 函数排序(直接平方后排序)#include <stdio.h> #include <stdlib.h> int cmp(const void *_a, const void *_b){ int *a ...
2022-04-04 22:04:25
352
原创 《力扣刷题》 二分查找(山脉数组的峰顶索引)
题目描述定义山脉数组 的长度 大于 2,且存在索引项 i,使大于此前和此后的所有元素(直到 和)C 语言具体代码实现先看看作者本人的想法!!!(和枚举法差不多,哈哈哈) 我们先计算出数组中间元素的索引项 mid,然后在此索引项二边查找峰顶,满足#include <stdio.h> int peakIndexInMountainArray(int *arr, int arrSize){ // 先找到数组的中间位置 int l...
2022-04-04 20:30:22
294
原创 《力扣刷题》二分查找(搜索插入位置)
题目描述若存在一个递增数组和一个目标值,要求在数组中找到目标值,并返回其索引;若目标值不在数组中,则返回它将被插入的索引值此处在以往二分查找的基础上拓展了一个小地方 以往如果查找到目标值,那么返回索引值;若没有查找到目标值,那么返回 -1(代表没找到) 如今如果查找到目标值,那么返回索引值;若没有查找到目标值,那么返回其应该插入的索引位(使其仍为递增数组)C 语言具体代码实现此题二分查找的运用过程如下:#include <stdio.h>...
2022-04-04 19:24:46
287
原创 《力扣刷题》 数据结构入门(合并两个有序数组)
题目描述若存在两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示其元素数目要求合并 nums2 到 nums1 中,并且使合并后的数组同样按非递减顺序排列相信肯定有一部分人不太理解此处的非递减顺序!!! 其实简单来说,就是递增顺序,但是又不是严格递增,如然后可能也不太理解两个数组是如何合并的!!! 如数组 nums1 和 nums2的长度都为 3,那么提前将 nums1 开辟 3+3=6 的内存空间,前三个...
2022-04-04 15:23:24
785
2
原创 《力扣刷题》 数据结构入门(两数之和)
题目描述若存在一个整数数组 nums 和一个整数目标值 target,需要在该数组中找出和为目标值 target 的两个整数,并返回其数组下标注意!!!数组中同一个元素在答案里不能重复出现,也就是说,如果,目标值,答案返回的索引值不能单纯的为,应该为C 语言具体代码实现先谈一种暴力破解法!!!—— 时间复杂度:也就是让数组 nums 中的任意二项都进行匹配相加,若和刚好为目标值 target,那么返回其对应的索引值 具体方法是枚举数组中的每一...
2022-04-04 14:54:11
703
原创 前端 HTML(1)
<!doctype html><!--@@@ 2021/1/23 @@@--><html lang="en"><head> <meta charset="UTF-8"> <title>html 第一天</title></head><body> <!-- 1. html 文件包括头部分和身体部分,头部分的内容不会显示在网页中,身体部分的内容会显示在网页中 --
2022-04-03 23:20:31
303
原创 前端 HTML(2)
<!DOCTYPE html><!--@@@ 2021/1/24 @@@--><html lang="en"><head> <meta charset="UTF-8"> <title>html 第一天</title> <link rel="stylesheet" href="css/first.css"> <style> h2{
2022-04-03 23:20:10
515
原创 Python 进程
让你的代码更灵活:进程和线程1、进程2、线程3、线程锁前言进程和线程是操作系统所提供的能让程序在同一时间处理多个任务(让程序能够做到「一心二用」)1、进程当我们运行一个程序时,这个程序的代码会被操作系统加载内存中,并创建出一个进程来承载和运行它简单来说,每一个运行中的程序就是一个进程,这个进程被称为主进程在主进程中,我们可以创建子进程来协助处理其它任务,这时主进程和子进程是并行运行的子进程也可以有它的子进程,从而形成以主进程为根的一棵进程树# 语法1# multiprocessi
2022-04-03 23:18:05
400
原创 《力扣刷题》 分割字符串的最大得分
题目描述若存在一个由若干 0 和 1 组成的字符串 s ,需要计算并返回将该字符串分割成两个非空子字符串(左子字符串和右子字符串)所能获得的最大得分「分割字符串的得分」为左子字符串中 0 的数量加上右子字符串中 1 的数量C 语言具体代码实现如下是我在力扣里无法通过编译的代码,但是可能在 dev编译器中通过!!!将 int length = sizeof(s)/sizeof(s[0]) 改成将int length = strlen(s) 就不报错了具体思想是,通过一个循环语句..
2022-04-03 22:43:21
590
原创 《力扣刷题》 二分查找(猜数字大小)
题目描述猜数字游戏的规则如下:每轮游戏,都会从1到n 随机选择一个数字,需要我们来猜是那个数字,如果我们猜的数字大于给出的数字那么返回 -1;如果我们猜的数字等于给出的数字那么返回 0;否则返回 1也就是说,每次游戏可能会含有几轮!!!而且每轮给出的数字都是变化的C 语言具体代码实现#include <stdio.h>#include <stdlib.h>#include <time.h>int guess(int n...
2022-04-03 21:44:54
3564
原创 《力扣刷题》 二分查找
题目描述若存在一个 n 个元素升序的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在则返回下标,否则返回 -1C 语言具体代码实现此题二分查找的运用过程如下:在升序数组 中寻找目标值 ,对于特定下标 ,比较 和 的大小:,则 即为要寻找的下标,则只能在下标的左侧 ,则只能在下标的右侧#include <stdio.h>...
2022-04-03 21:00:10
571
原创 《力扣刷题》 二分查找(寻找比目标字母大的最小字母)
题目描述若存在一个排序后的字符列表 letters,列表中只包含小写英文字母;另外存在一个目标字母 target,需要在这字符列表里寻找比目标字母大的最小字母特别注意!!!在比较时,字母是依序循环出现的,也就是说比 大的最小字母为C 语言具体代码实现第一种算法:线性查找!!!由于字符列表是已经从小到大排序好了的,也就是说从此列表的第一项开始同目标字符比较,直到最后一项,第一次出现比目标字符大的字符就是题目中需要寻找的字母;如果查找完毕都没有发现任何一个字符比目...
2022-04-03 20:26:03
340
原创 《力扣刷题》 数据结构入门(最大子数组和)
题目描述当我们拥有一个整数数组 nums 时,需要找出一个具有最大和的连续子数组并返回其最大和(最少包含一个元素)C 语言具体代码实现第一种算法:动态规划!!!从数组的第二项元素开始,若前面一项元素的值大于 0,则将前面一项的元素值加到当前项上来,最后找到数组中的最大值,此值即为连续子数组的最大和#include <stdio.h>int maxSubArray(int *nums, int numsSize){ // 动态规划 for(int i
2022-04-03 15:25:56
586
原创 《力扣刷题》 数据结构入门(存在重复元素)
题目描述当我们拥有一个整数数组 nums 时,如果任一值在数组中出现至少二次 ,返回 true;否则返回 falseC 语言具体代码实现我们先谈一种容易被理解的方法!!!暴力破解法:利用二重循环,将数组内的所有元素进行比较,有相同则返回 true,遍历结束后未发现相同元素则返回 false#include <stdio.h>bool containsElements(int *nums, int numsSize){ // 进行最大化的比较 for(in
2022-04-03 14:31:36
424
原创 (数据结构)图的邻接表存储结构
图的邻接表存储结构一般来说,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表、邻接多重表和十字链表本篇文章将优先介绍邻接表!!!邻接点:在图中,如果两个点相互连通,且通过其中一个顶点,可直接找到另一个顶点,则称它们互为邻接点邻接:指图中顶点之间有边或者弧的存在邻接表存储图的实现方式:给图中的各个顶点独自建立一个链表,用节点存储该顶点,用另一个链表中的节点存储其邻接点特殊之处是,为了便于管理这些链表,通常会将链表的头节点存储到数组中,也正因为各个链表的头节点存储的是各个顶
2022-04-03 10:54:02
4340
1
原创 (数据结构)对图的顺序存储结构的补充
图的顺序结构存储无向网和有向网如下是一个有向网!!!代码实现如下(包括无向网):#include <stdio.h>#define MAX_NUM 20 // 顶点的最大个数typedef enum{ DG, DN, UDG, UDN // 依次代表的值为 0,1,2,3} GraphKind; // 枚举图的 4 种类型typedef struct{ int adj; // 对于无权图(用 1或 0表示是否相邻)对于带权图(直接为权值) .
2022-04-02 23:42:36
251
原创 (数据结构)图的顺序存储结构
图的顺序存储结构使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点之间的关系(二维数组)不同类型的图,存储的方式略有不同,根据图有无权,可以将图划分为两大类:图和网图:包括无向图和有向图网:是指带权的图,包括无向网和有向网存储方式的不同指的是:在使用二维数组存储图中顶点之间的关系时,如果顶点之间存在边或弧,在相应位置用 1 表示,反之用 0 表示;如果使用二维数组存储网中顶点之间的关...
2022-04-02 23:25:24
1362
原创 (数据结构)生成树
生成树在连通图的基础上,本篇文章将介绍什么是生成树,以及什么是生成森林先介绍生成树!!!对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树图 1 连通图及其对应的生成树图 1 中,左侧是一张连通图,右侧是其对应的 2 种生成树但是介绍到这里我想疑问还是很多的,比如说遍历的方法是什么!生成树的定义是什么!遍历的方法:连通图中,通过任意两顶点之间可能含有多条通路进行遍历图 1 中,右侧第一张生成树的遍历过程为或 ...
2022-04-02 22:15:21
10301
3
原创 (数据结构)连通图
图存储结构分类之连通图连通:图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的图 1 顶点之间的连通状态示意图图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径和,因此称 V1 和 V3 是连通的连通图(无向图):任意两个顶点之间都能够连通图 2 连通图示意图图 2 中,因为此无向图中任意两顶点之间都是连通的,故此图就是一个连通图连通分量:若无向图不是连通图,但图中存储某...
2022-04-02 21:45:59
11099
原创 (数据结构)图存储结构
图存储结构数据之间的关系有三种,分别是一对一、一对多和多对多,前两种关系的数据可分别用线性表和树结构存储,本篇文章将介绍具有多对多逻辑关系数据的结构(图存储结构)先看一看如下的无向图!!!图 1 无向图示意图图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以看出数据之间具有的多对多关系,例如,V1 与 V4 和 V2 建立着联系,V4 与 V1 和 V3 建立着联系与链表不同,图中存储的各个数据元素被称为顶点(而不是节点)图存储结构中,习惯上用 表示图中的顶点,且
2022-04-01 23:14:49
427
原创 (数据结构)N 个结点构造多少种树
相似树和等价树如果两棵树中各个结点的位置都相对应,可以说这两棵树相似;如果两棵树不仅相似,而且对应结点上的数据也相同,就可以说这两棵树等价对题目的解读本篇文章要讨论的是当给定 N 个结点时,可以构建多少种形态不同的树(互不相似)对于任意一棵普通树,通过孩子兄弟表示法的转化,都可以找到唯一的一颗二叉树与之对应,于是乎本篇文章研究的问题也可以转化成:N个结点可以构建多少种形态不同的二叉树每一棵普通树对应的都是一棵没有右子树的二叉树(孩子兄弟表示法的转化后),所以对于 N个结点的树来说,...
2022-04-01 22:31:42
4553
2
原创 (数据结构)浅谈回溯算法(一)
题目描述列举如下集合中的所有子集{1, 2, 3}在解决列举如上集合中所有子集的问题中,就可以使用回溯算法从集合的开头元素开始,对每个元素都有两种选择:取还是舍,当确定了一个元素的取舍之后,再进行下一个元素,直到集合最后一个元素;其中的每个操作都可以看作是一次尝试,每次尝试都可以得出一个结果,将得到的结果综合起来,就是集合的所有子集代码实现#include <stdio.h>int set[5];// i代表数组下标,n表示集合中最大的元素值void Po.
2022-03-31 23:18:47
323
原创 C语言结构体
结构体结构体概括数据类型概括结构体概括在C语言中,可以使用结构体来存放一组不同类型的数据结构体的定义形式为:struct 结构体名{ 结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同举一个栗子!!!struct student{ char *name; int num; int age; float score;};student 为结构体名,它包含了四个成员(name,
2022-03-31 23:08:53
165
原创 (数据结构)哈夫曼树
哈夫曼树相关的几个名词图1 哈夫曼树路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径图 1 中,从根结点到结点 a 之间的通路就是一条路径路径长度:在一条路径中,每经过一个结点,路径长度都要加 1图 1 中,从根结点到结点 c 的路径长度为结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权图 1 中,结点 a 的权为 ,结点 b 的权为结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积...
2022-03-31 23:05:47
1456
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人