- 博客(37)
- 收藏
- 关注
原创 010、随机链表复制
的,如果按照我的想法复制,random是空的时候没问题,不是空的时候random指针不是指向新链表里面的结构,还是。这里注意newcur可能会越界,所以要 if 拦截一下,cur走到头的时候,不要让newcur再走了!复制完copy里面的random之后,再把copy链表给解下来,还原原链表。,我创建节点的时候加一个结构体成员不就可以了吗?我的第一个想法是,直接把random指针看成一个。copy链表和原链表得先建立联系,把每一个节点。1、拷贝到每个节点的后面,组成两倍长度的新链表。
2024-10-25 14:56:38
409
原创 009、环形链表
2、我们需要证明一个数学问题,在起始点开始走和在相遇点开始走,再次相遇的地方一定是入环点。1、 首先判断链表有没有环,方法是快慢指针,如果有环,快指针会追上慢指针,两指针相等。3、于是在第一段代码的基础上,有环就加一个循环找进环点,没有环就返回空。
2024-10-21 18:52:13
227
原创 008、相交链表
嵌套循环,从listA的第一个节点开始与listB的每个节点比对,有相同的就返回这个节点。不用循环的方式找交点,如果双指针一起走的话,listA和listB的长度不同,容易。,让长链表的指针先走一会儿,再齐头并进,就能找到交点。如图,让listB的指针先走1下,就可以齐头并进了。所以先求listA和listB的长度,然后。,再双指针一起走就可以了。
2024-10-19 01:10:34
343
原创 006、链表分割
这道题的思路,遍历原链表,小于x的放到一个链表里,大于x的放到另一个链表里。然后把两个链表接起来。建立的两个新链表都是有哨兵位的,也就是有头结点,排序结束后要free两个头结点。
2024-10-18 23:12:41
176
原创 005、翻转链表
创建一个新的头结点newhead,然后把原来的链表节点头插到新的节点里。注意在这个过程里cur->next找不到了,需要提前保存一下。思路是改变链表的指针方向,本来箭头向右改向左。问题是改变箭头之后链表就无法继续往下走了,所以需要3个指针,利用迭代的办法往下走。递归,递归和上面的循环有相似的地方,不过不太好理解。
2024-10-17 17:29:17
250
原创 004、合并两个有序数组
创建一个新数组sorted来存储数据,再去把排好序的数组粘到nums1里。创建3个指针在三个数组里移动,把较小的数据先放进去。和第二种方法类似,只不过是倒着比较大小,这样的好处是,0一定小于有效元素,而且不需要创建新数组直接在nums1里面操作不会损失数据。数组nums1有m个元素, 直接在下标为m的位置处追加nums2的元素。然后再qsort整体排序。qsort函数,(数组首元素地址,排序的个数,排序元素大小, 比较函数)注意比较函数里面的参数要传递指针。
2024-10-10 23:52:56
500
原创 003、移除元素
用两个下标同时遍历数组,一个是scr一个是dst,dst是我们删除元素之后的数组,dst一定是小于scr的,所以可以共用一个数组空间而不损失数据。和上题的思路一样,dst假设就是我新建的一个数组的下标,由于是删除操作,dst一定小于src,所以就用原来的nums的数组空间。数组首元素一定需要,所以从1开始遍历,后面的元素和上一个元素相同就跳过,不同再去给dst。
2024-09-27 00:53:44
198
原创 001、旋转数组
尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。你可以使用空间复杂度为O(1)的 原地 算法解决这个问题吗?
2024-09-18 22:54:33
235
原创 C语言零基础速通扫雷游戏(下)
对于上面的代码(unsigned int)time(NULL) 第一次看到可能会觉得难以理解, 我第一次看到这段代码的时候也很头大, 但是随着我们系统性地学习C语言之后, 就没那么难了, 现在可以直接当固定搭配记住了就可以了, 这样的代码可以让我产生随机数序列。我们发现上面的代码无论运行多少次, 随机数的序列是不会变的, 要产生真随机数, 就需要一个随机的数来当srand的参数, 可是我们就是因为没有随机数才去用srand函数的啊~~
2024-08-30 23:54:59
996
1
原创 C语言零基础速通扫雷游戏(上)
1,Visual Studio下载好,创建出 .c 后缀的源文件2. 启动 —— 创建新项目——创建c++空项目——快捷键(CTRL + SHIFT + A)添加新项—— 把文件后缀的 .cpp 改为 .c3.如果用的是搜狗输入法, 建议打开中文时使用英文标点2,复制下面代码在最前面// 是注释, 程序在执行的时候会忽视 //后面的东西, 可以随便写。
2024-08-30 21:31:26
1589
原创 五月集训 DAY13 【双向链表】
430.扁平化多级双向链表你会得到一个双链表,其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指针可能指向一个单独的双向链表,也包含这些特殊的节点。这些子列表可以有一个或多个自己的子列表,以此类推,以生成如下面的示例所示的 多层数据结构 。给定链表的头节点 head ,将链表 扁平化 ,以便所有节点都出现在单层双链表中。让 curr 是一个带有子列表的节点。子列表中的节点应该出现在扁平化列表中的 curr 之后 和 curr.next 之前 。返回 扁平列表的 head 。
2022-05-13 16:11:56
321
原创 五月集训 DAY12 【链表】
1290.二进制链表转整数给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)输入:head = [0]输出:0输入:head = [1]输出:1输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]输出:18880输入:head = [0,0
2022-05-12 20:25:16
309
原创 五月集训 DAY11【矩阵】
1351.统计有序矩阵中的负数给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]输出:8解释:矩阵中共有 8 个负数。输入:grid = [[3,2],[1,0]]输出:0m == grid.lengthn == grid[i].length1 <= m, n <=
2022-05-11 17:20:54
342
原创 五月集训 DAY10 【位运算】
位运算规则(&,|,^)1、按位与“ & ”对应“且”。一假既假,都真才真;一0既0,都1才1。 找到都为1的位置。2、按位或“ | ”对应“或”。一真既真,都假才假;一1既1,都0才0。 找到存在1的位置。3、异或“ ^ ”,相同取0,不同取1。异或,找到相异的位置,所以相异的取1。191.位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。输入:00000000000000000000
2022-05-10 11:20:55
210
原创 五月集训 DAY09【二分查找】
35.搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。输入: nums = [1,3,5,6], target = 5输出: 2输入: nums = [1,3,5,6], target = 2输出: 1输入: nums = [1,3,5,6], target = 7输出: 41 <= nums.length <= 104-104
2022-05-09 18:42:11
529
原创 五月集训 DAY08【前缀和】
1480.一维数组动态和给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
2022-05-08 22:51:47
199
原创 五月集训:DAY07【哈希表】
1512.好数对的数目给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始输入:nums = [1,1,1,1]输出:6解释:数组中的每组数字都是好数对输入:nums = [1,2,3]输出:01
2022-05-07 08:05:55
273
原创 五月集训:DAY06【滑动窗口】
1984.学生分数的最小差值给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。返回可能的 最小差值。输入:nums = [90], k = 1输出:0解释:选出 1 名学生的分数,仅有 1 种方法:[90] 最高分和最低分之间的差值是 90 - 90 = 0可能的最小差值是 0输入:nums = [9,4,1
2022-05-06 09:34:55
371
原创 五月集训:DAY 04 [贪心]
1.分割平衡字符串在一个 平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。返回可以通过分割得到的平衡字符串的 最大数量。输入:s = “RLRRLLRLRL”输出:4解释:s 可以分割为 “RL”、“RRLL”、“RL”、“RL” ,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’输入:s = “RLLLLRRRLR”输出
2022-05-04 09:06:07
167
原创 五月集训:DAY03[排序]
1.有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]1 <= nums.length <= 104104 <= nums[i
2022-05-03 22:16:23
504
原创 五月集训:DAY01数组
1.增量元素之间的最大差值给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。输入:nums = [7,1,5,4]输出:4解释:最大差值出现在 i = 1 且 j = 2 时,nums[j] - nums[i] = 5 - 1 = 4 。
2022-04-30 14:27:30
472
原创 C语言 整形提升
1.数据类型一个字节由8个二进制组成11111111 00001010char 类型是1个字节char a= 10; char b= -1//00001010 //11111111int 类型是4 个字节int a = 10;//00000000 00000000 00000000 00001010int b =-1;//1111111 11111111 111...
2022-04-03 15:49:52
864
原创 C语言C4996错误简单解决方法
1.复制粘贴:#define _CRT_SECURE_NO_DEPRECATE 1或者#pragma warning(disable : 4996)2.修改:把scanf函数修改为scanf_s如果不想每次需要输入scanf都过来复制一遍.VS2019亲测有效.
2022-04-02 09:34:21
8902
原创 我的c语言学习进程(10)
(一)函数的定义: 子程序,语句块,执行特定任务,具有独立性。 函数分为:库函数(写好的函数)和自定义函数(造轮子)。(二)参数: 形参:定义函数时的参数。形式上的参数(摆设),是实参的临时拷贝,不能改变实参。形参不开辟空间,在调用函数后悔自动销毁。 实参:调用函数时的参数。常量,变量,表达式,函数,必须有确定值以便传给形参。 (三)函数的组成:返回类型,函数名,函数参数,函数体。ret_type fun_name(para1, *){ statemen
2022-03-14 23:34:37
776
原创 我的c语言学习进程(9)
找出两个数的最大公约数1.辗转相除法:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int max = 0; int min = 0; scanf("%d %d", &max, &min); if (max < min) //让大数一直是m,小数为n { int a = max; max = min; min = a; } if (0 == (
2022-03-09 22:47:50
233
原创 我的c语言学习进度(8)
小游戏——猜数字#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include<Windows.h>#include<stdlib.h>#include<time.h>void menu(){ printf("***********************************************\n"); printf("**
2022-03-05 00:29:18
5085
原创 我的c语言学习进度(7)
循环结构1.for循环#include<stdio.h>int main(){ int i = 0; for (i = 1; i <= 10; i++) // 不要在for循环体内修改循环变量,防止循环失控 { // if (5 == i) { //break; continue; //跳过5,继续进行i++ } printf("%d \n", i); } return 0
2022-03-04 23:47:46
334
1
原创 我的c语言学习进程(6)
分支结构1.if else分支结构if (表达式) 语句;if(表达式) 语句1;else 语句2;if(表达式1) 语句1;else if 语句2;else if 语句3;else 语句4;2.Switch分支结构#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int day = 0; scanf("%d", &day)
2022-03-01 21:57:15
335
原创 我的c语言学习进程(5)
1.习题:1.两个数找出大数(1)答题#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int max = 0;int BJ(int x,int y){ if (x > y) max = x; else max = y; return 0; }int main(){ int a, b; scanf("%d %d", &a, &b); BJ(a, b);
2022-03-01 18:59:50
233
原创 我的c语言学习进程(4)
1.define定义常量和宏#include<stdio.h>#define MAX 2022 //#define定义常量#define ADD(X,Y) ((X)+(Y)) //#define定义宏,注意括号。int main(){ printf("%d\n", MAX); printf("%d\n", 4 * ADD(2, 3)); return 0;}2.初识指针#include<stdio.h&
2022-03-01 17:11:03
289
原创 我的c语言学习进程(3)
1.常见关键字 typedef 、static(1)typedef类型重命名#include<stdio.h>typedef unsigned int 自己命名;int main(){ unsigned int a = 100; 自己命名 b = 90; printf("行%d里者半%d\n", a, b); return 0;}(2)static 静态的,修饰局部变量、全局变量和函数。#include<stdio.h>//static
2022-03-01 12:21:59
241
原创 gitee的克隆仓库与上传
(一)仓库克隆1.网页搜索:git for Windows,下载这个软件,下载完一路点next默认安装完成。2.在gitte网站建立一个新仓库(名字自拟),配置仓库时要去初始化文件。3.初始化完成后,转到桌面,鼠标右键找到Git Bash Here打开。会弹出一个黑框框。4.在黑框框利输入命令,配置git操作的用户名,邮箱,公钥(无双引号)(1)$ git config --global user.name "你的用户名(个人主页下面的英文名)" 回车...
2022-02-28 21:41:27
3780
1
原创 我的c语言学习进程(2)
1.函数入门一个小加法:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>Add(int x, int y) //函数的解决办法{ int z = 0; z = x + y; return z;}int main()//加法{ int a = 0; int b = 0; scanf("%d %d", &a, &b); /* int sum = a +
2022-02-27 23:05:29
281
原创 我的学习c语言进程(1)
1.有关vs2019的操作,建设空项目;分为三步:建设空项目——在项目中建源文件(Shift+Ctrl+A)——改名***.c,这样就可以写了!基本第一个程序#inlude<stdio.h>int main(){ printf("hello,world!"); return 0;}2.模拟写代码#include<stdio.h>int main(){ int line = 0; while (line < 30000
2022-02-27 22:49:28
230
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人