首页
关于
在线观影
数据统计
在线直播
在线壁纸
更多
友情链接
Search
1
宝塔9.6.0开心版本 - 破解版 - 无后门版本
120 阅读
2
如何免费利用授权服务器(License Server)激活Jetbrains全家桶
70 阅读
3
记录一次网站的崩溃历史!
57 阅读
4
欢迎使用 Typecho
51 阅读
5
2025年Flutter开发全网最全学习路线指南
43 阅读
C/C++
Python
技术分享
前端项目学习
Vue
日常分享
八股文面试
科技闲聊
登录
/
注册
Search
标签搜索
苹果cms
苹果cms问题
苹果cmsseo
RSS订阅
Vue学习
RSS
LLM
大语言模型
DeepSeek
tvbox官网
信息获取
订阅教程
海绵博客
VUE
蒸馏模型
Django
前端项目
影视网站
前后端不分离项目
Python
小菩提
业精于勤,荒于嬉。行成于思,毁于随。
累计撰写
101
篇文章
累计收到
15
条评论
首页
栏目
C/C++
Python
技术分享
前端项目学习
Vue
日常分享
八股文面试
科技闲聊
页面
关于
在线观影
数据统计
在线直播
在线壁纸
友情链接
搜索到
93
篇与
的结果
力扣相交链表
今天看到了一种大佬的思路 的确牛皮,如果是我的话 可能我就会傻傻的俩个循环去判断了,先贴上题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at '8'解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。示例 2:输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1输出:Intersected at '2'解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。示例 3:输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2输出:No intersection解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。这两个链表不相交,因此返回 null 。接下来上代码和大佬的解释,以上所有文字原子力扣/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { struct ListNode *q,*p; for(p = headA,q = headB;p != q;){ if(p != NULL){ p = p -> next; }else p = headB; if(q != NULL){ q = q -> next; }else q = headA; } return p; }上面是C语言版本1.如果按照大佬的代码可能刚开始看不懂,但是我这个版本刚刚好具体算法如下:初始化两个指针 p=headA, q=headB。不断循环,直到 p=q。每次循环,p 和 q 各向后走一步。具体来说,如果 p 不是空节点,那么更新 p 为 p.next,否则更新 p 为 headB;如果 q 不是空节点,那么更新 q 为 q.next,否则更新 q 为 headA。循环结束时,如果两条链表相交,那么此时 p 和 q 都在相交的起始节点处,返回 p;如果两条链表不相交,那么 p 和 q 都走到空节点,所以也可以返回 p,即空节点。
2024年11月11日
11 阅读
0 评论
1 点赞
力扣559 - N叉树的最大深度
今天还是日更一篇博文,刚开始的确没有想到,看了大佬的想法后做出来的,这个还是用的递归思想,首先我们还是贴上题目给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1: 输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2: 输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:5int maxDepth(struct Node* root) { if (root == NULL) { return 0; } if(root -> numChildren == 0) { return 1; } int maxdepth = 0; for (int i = 0; i < root -> numChildren; i++) { maxdepth = fmax(maxdepth,maxDepth(root -> children[i])); } return 1 + maxdepth; } 那么思路来了,首先我们先判断,如果root是空的话 也就是抵达了最下面,那么直接返回0接下来,如果root的孩子节点的数量是0的话 说明下面没有分支了,那么返回1接下来先确定一个最大深度的变量接下来写一个for循环。初始化是1,然后接下来i种植的条件是numChildren的数量,然后i++接下来可以看到maxdepth的数量是随着maxdepth和maxDepth函数的传入值进行的比较。谁大取谁,最后返回maxdepth+1是因为最大的值是numchildren,所以说要加一个最上面的头节点以上就是简单的思路,总之来说用的是递归和二叉树的简单思路
2024年11月10日
10 阅读
0 评论
1 点赞
2024-11-09
力扣日更859亲密字符串
依旧是正常的日更,今天来看一很好的题目给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。这个不可以想的很简单,要卡很多的范围!!!我先直接上代码把#include <stdio.h> #include <string.h> int hash[26]; bool buddyStrings(char * s, char * goal){ int len_s = strlen(s); int len_g = strlen(goal); int left = 0; int right = len_s - 1; if (len_g != len_s) { return false; } memset(hash, 0, sizeof(hash)); if (strcmp(s, goal) == 0) { for (int i = 0; i < len_s; i++) { hash[s[i] - 'a']++; if (hash[s[i] - 'a'] >= 2) { return true; } } return false; } while (left < len_s && s[left] == goal[left]) { left++; } while (right >= 0 && s[right] == goal[right]) { right--; } char tmp = s[left]; s[left] = s[right]; s[right] = tmp; return strcmp(s, goal) == 0 ? true : false; } 代码原理很简单,首先先定义俩长度 sizeof(s)sizeof(goal),用来作比较接下来先简单比较,如果连大小都不一样的话 那么没必要后面的判断了。接下来如果我们假设a是aa goal也是aa的话那么先进行判断 strcmp是比较字符串是否相等的一个函数,用来比较俩值是否相等的那么如果相等的话 让这个每一个值都存到hash里面,如果hash大于2的话 那么判断是true 接下来是不相等的情况 比如s是aab goal是aba的话那么 进行循环判断,当第一次循环的时候发现 left是1的情况就停止了,第二次循环是当第一下就听着就停止了,此时的right是2接下来 数组进行交换后判断俩字符串是否相等,相等出true 不相等出false还有一种情况是 s是aab goal是aac的情况那么直接进行循环判断,第一次循环的时候,left是2的时候停止,那么第二次循环也是2的时候停止 right是2的情况下那么这种情况下字符串换顺序就没有任何的意义当strcmp的时候,他就会自动返回falsereturn strcmp(s,goal) == 0?true : false;
2024年11月09日
13 阅读
0 评论
0 点赞
2024-11-08
力扣照常更新896 单调数列
今天这个有点意思 有点flag的感觉,但是又不太一样的样子直接上题目如果数组是单调递增或单调递减的,那么它是 单调 的。如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。当给定的数组 nums 是单调数组时返回 true,否则返回 false。那么很简单,进行循环判断即可但是怎么写在我这里犯了难,就是我不知道如何一直一直的表示下去那么我看了一眼别人写的我来简单的解释说明一下bool isMonotonic(int* nums, int numsSize) { int i; bool increasing = true; bool decreasing = true; for (i = 0; i < numsSize - 1; i++) { if (nums[i] > nums[i + 1]) { increasing = false; } else if (nums[i] < nums[i + 1]) { decreasing = false; } // 如果既不递增也不递减,则不是单调数组 if (!increasing && !decreasing) { return false; } } return true; } 意思就是 先设置一个i变量进行循环判断,然后设置decreaing和increasing来作为bool来判断,接下来就是判断的正常基槽了。比如123 如果第一个小于第二个的话 increasing是true decreasing是false那么接下来执行下面的代码 如果increasing是false decreasing也是false,那么很简单 说明不是递增,也是不是递减的了看了这道题目,我又多了一种思考问题的方法真的厉害
2024年11月08日
10 阅读
0 评论
0 点赞
2024-11-06
力扣颠倒二进制位
这个是利用的进制的转换实现的首先我们要知道,如果一个二进制往左移动一位的话 那么相当于扩大了二倍,比如说二进制的1代表1.如果往左移动一位的话,就是10,那么这个二进制是2,相当于1 * 2.同样的道理,接着移动一位的话就是100,这个二进制是4。那么接下来的题目就很好完成了,颠倒给定的 32 位无符号整数的二进制位。uint32_t reverseBits(uint32_t n) { uint32_t result = 0; for(int i = 0;i < 32;i++){ result = (result << 1) +(n >> i & 1); } return result; }解释一下,首先就是定位了一个32位的result,初始化为0,接下来进行一个for循环。首先就是还是上面的案例,比如输入的是101,那么我们刚开始result是0,然后n向左移动一位是1,相当于1 + 0,接下来是result是1 但是此时的result需要向左移动一位也就是变成了10,接下来加上n的第二位,是0,和1进行异或运算,结果是0,那么10 + 0是10接下来同样的道理,可以很轻松的得到正确的答案。
2024年11月06日
10 阅读
0 评论
0 点赞
1
...
16
17
18
19