牛客、力扣刷题库
偏基础的牛客和力扣的刷题
幻荼
这个作者很懒,什么都没留下…
展开
-
HJ1 字符串最后一个单词的长度(JAVA)
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。唯一不了解的地方可能就是split函数,这里有一篇我自己写的split函数简单用法的文章,大家可以看看。不是特别难的题,作为java的初学者,一定要记清楚如何使用String的录入和输出。第二步,运用split函数对字符串进行划分,然后定义一个字符串数组进行存储。输入一行,代表要计算的字符串,非空,长度小于5000。输出一个整数,表示输入字符串最后一个单词的长度。最后一个单词为nowcoder,长度为8。第一步,接受键盘输入的字符串。原创 2023-03-21 00:58:04 · 252 阅读 · 0 评论 -
剑指 Offer 05. 替换空格(力扣C++)
没啥好说的,唯一可能的难点也就是忘记了遍历罢了直接上代码。实在不行,用push_back也不是不可以。中的每个空格替换成"%20"。请实现一个函数,把字符串。原创 2023-01-30 22:56:53 · 101 阅读 · 0 评论 -
剑指 Offer 24. 反转链表(力扣)
然后开始遍历这个链表,为了防止修改next后找不到位置,我们需要一个新的指针存储位置。定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。就是最基础的反转列表,定义两个指针,一个指向空,一个指向head即可。原创 2023-01-29 20:56:42 · 87 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表(力扣)
所以,我们判断原vector的头指针是否为空,不为空就一直向后,直到最后一个数位置,再依次重后往前压入新的vector中。加入我们原来的vector里面是输入的【1,3,2】,那么我们新的vector里面的顺序就应该是【2,3,1】反正都是从后往前,那我们也可以用栈来存储,到时候从栈顶一个一个拿数据不也一样?输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。将栈中的数据全部出栈到新vector里面,最后return即可。定义一个栈,和一个用来返回的vector。原创 2023-01-29 20:28:25 · 156 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈(力扣)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。设计两个栈一个栈用来实现正常的push,pop,另一个栈用来存储最小值。在每存储一个数,就需要将他和minStack的栈顶进行比较。--> 返回 -3.minStack.min();--> 返回 -2.第一次存储没有比较对象,就需要单独存储一次。如果小就存进去,大就再存储一次自己的栈顶。原创 2023-01-28 20:40:11 · 552 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列(力扣)
用两个栈实现尾部插入和头部删除,首先我们就需要在全局定义两个栈,分别用作插入栈(inStack)和删除站(outStack),分别完成在队列尾部插入整数和在队列头部删除整数的功能。那么只需要将inStack里面的数据一个一个压入outStack的栈即可。假如,我们现在先后插入了5和2两个数字在我们的inStack里面。队列的声明如下,请实现它的两个函数。因为是从队头开始删除,所以我们是先删除5然后删除2。这种情况只需要判断两个栈为空,返回-1即可。实现队尾的插入,直接运用push函数即可。原创 2023-01-28 17:55:17 · 346 阅读 · 0 评论 -
c++:二叉搜索树与双向链表(力扣)
数据范围输入二叉树的节点数0\len\le10000≤n≤1000,二叉树中每个节点的值0\leval\le10000≤val≤1000。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。(2)此时将prev为空,跳过if的判断句,cur直接给prev,此时prev就为4,然后4的右为空,返回6,6成为了现在的cur。3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构。输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。...原创 2022-07-31 18:54:32 · 222 阅读 · 0 评论 -
有效的括号(力扣)
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true解题思路:我们这里运用栈的先进后出思维,我们设置一个栈,只要遇到了左括号,就入栈,遇到右括号就出栈,看出栈的右括号是否和左括号匹配入栈情况:出栈情况:这里先列出总代码,然后后面写出图解:总代码:ty.原创 2022-04-04 22:30:17 · 515 阅读 · 0 评论 -
合并两个有序数组,力扣,三指针
目录题目:解题思路:代码:图解:题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums原创 2022-03-20 19:21:39 · 83 阅读 · 0 评论 -
牛客,寻找奇数
题目:现在有一个长度为 n 的正整数序列,其中只有一种数值出现了奇数次,其他数值均出现偶数次,请你找出那个出现奇数次的数值。输入描述:第一行:一个整数n,表示序列的长度。第二行:n个正整数ai,两个数中间以空格隔开。输出描述:一个数,即在序列中唯一出现奇数次的数值。输入:52 1 2 3 1输出:3解题思路:我们首先了解一下异或的运算性质a^a=0 0^a=a x^x^x^y=x^y假如我按照例题中输入2 1 2 3...原创 2022-02-15 14:09:07 · 453 阅读 · 0 评论 -
最长回文字符串(力扣)(暴力)
题目:给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"解题思路:因为是回文,所以有奇数对称和偶数对称两种,所以也衍生出来奇数和偶数两种判断方式,而每种判断的方式都相同,只要满足左右对称,则左--,右++,最后只需要将return的起始位置放在最左,然后让最右+1的位置为‘\0’,即可代码如下char * longestP原创 2022-03-01 20:42:02 · 174 阅读 · 0 评论 -
复制带随机指针的链表(力扣)
目录题目:解题思路:总代码:动图图解:题目:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中.原创 2022-04-02 21:23:45 · 71 阅读 · 0 评论 -
用队列实现栈(力扣)(图解)(c语言)
目录题目:解题思路:初始化图:总代码:题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— ..原创 2022-04-08 00:50:43 · 1130 阅读 · 0 评论 -
力扣238. 除自身以外数组的乘积
题目:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间.原创 2022-01-21 14:47:43 · 528 阅读 · 0 评论 -
c++:力扣,最小栈
设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。实现MinStack类MinStack()初始化堆栈对象。voidpush(intval)将元素val推入堆栈。voidpop()删除堆栈顶部的元素。inttop()获取堆栈顶部的元素。intgetMin()获取堆栈中的最小元素。示例1输入输出解释-->返回-3.-->返回0.-->返回-2....原创 2022-07-20 17:49:03 · 321 阅读 · 0 评论 -
力扣 寻找数组的中心下标 c语言
目录题目:第一步:第二步:总代码:题目:给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。第一步:定义两个变量,一个是所有元素的总和,另一个是左元素的总和,然原创 2022-01-19 12:41:42 · 109 阅读 · 0 评论 -
无重复字符的最长子串(暴力)(力扣)
题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解题思路:我们假设有两个指针,left和right,他们起始位置都为char*s的0处,只要获取一个字符,right指针就向后一位,直到结束int lengthOfLongestSubstring(char * s){int left=0,right=0;while(s[r.原创 2022-03-01 17:39:01 · 313 阅读 · 0 评论 -
vector:c++:杨辉三角(力扣)
目录题目:解题思路:第一步:创建行和列第二步:给首尾赋值第三步:中间数 总代码:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]实际上思路很简单,中间的每个数字,就是他的上一行同位置的数据,+上一行同位置数据-1的位置的数据。列如第三行的’2’,他的坐标是[2][1],那么他就等于[1][1]+[原创 2022-07-08 11:28:29 · 477 阅读 · 0 评论 -
JZ42 连续子数组的最大和(力扣)(gif图解)
题目:输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。数据范围:1原创 2022-07-13 20:32:07 · 159 阅读 · 0 评论 -
力扣,找到最近的有相同 X 或 Y 坐标的点
题目:给你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 。请返回距离你当前位置 曼哈顿距离 最近的 有效 点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标 最小 的一个。如果没有有效点,请返回 -1 。两个点 (x1, y1) 和原创 2022-02-18 14:12:36 · 160 阅读 · 0 评论 -
最大子数组和,力扣
题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。解题思路:因为是求最大和,所以我们应该保证我们的和时刻是正数,同时额外设置一个数来时刻记录最大和,一旦和为负数,我们就应该丢弃之前的所有和,来保证接下来的计算。以例题为例子,我们首先记录-..原创 2022-02-15 17:57:58 · 260 阅读 · 0 评论 -
链表分割(牛客)
题目:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。举例:假如列表为且x为4那么排序后为:解题思路:我们设定两个链表,第一个链表存放小于x的数,第二个链表存放大于等于x的数,并为其分别创立一个哨兵位结点struct ListNode* lesshead;lesshead=(struct ListNode*)malloc(sizeof(struct Li原创 2022-03-31 18:46:58 · 1654 阅读 · 0 评论 -
相交链表(力扣)
目录题目:解题思路:总代码:图解:题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。解题思路:我们在图中可以知道链表A:a1,a2,c1,c2,c3链表B:b1,b2,b3,c1,c2,c3如果他们相交,那么他们的末尾..原创 2022-04-01 16:33:51 · 1636 阅读 · 2 评论 -
牛客,把字符串转换成整数
目录题目:输入描述:返回值描述:示例1示例2解题思路:总代码:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0数据范围:字符串长度满足 0 \le n \le 100 \0≤n≤100 进阶:空间复杂度 O(1) \O(1) ,时间复杂度 O(n) \O(n) 注意:①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0②字符串中可能出现 +/- 且仅可能出现在字符串首位。输入一个字符串,包括数字字母符号,可以为空如果是合法原创 2022-07-04 14:02:52 · 76 阅读 · 0 评论 -
链表的回文结构(力扣)
题目:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。解题思路:首先我们找到该链表的中数,然后将中数后的所有数逆转,然后从头和该中数进行比较总代码:class PalindromeList {public: bool chkPalindrome(ListNode* A) { if(A==NULL||A->next..原创 2022-04-01 11:52:53 · 697 阅读 · 0 评论 -
力扣,反转字符串中的单词 III
题目:给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入:s = "Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"解题思路:我们发现每个单词都是相隔一个空格,假如我们设定两个指针,left和right,那么遇到空格时,交换left和right之间的所有字母,并且将left=right+1直到right到边界void swap(char *s,int原创 2022-02-18 15:10:59 · 332 阅读 · 0 评论 -
删除有序数组的重复项,双指针(力扣)
目录题目:解题思路:图解:题目:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组原创 2022-03-20 17:05:00 · 53 阅读 · 0 评论 -
c++:栈的压入、弹出序列(牛客)
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。可以通过push(1)=>push(2)=>push(3)=>push(4)=>pop()=>push(5)=>pop()=>pop()=>pop()=>pop()(4)然后pushV就到末尾了,就一个一个出栈看我们自创栈能否出完,出完就TRUE,不能就FALSE。我们创建一个额外的栈,判断进栈的元素是否和出栈的元素相等,如果相等就出栈,如果不相等就进栈。..原创 2022-07-20 20:02:01 · 257 阅读 · 0 评论