当前位置:首页 » 编程语言 » leetcodec语言题解
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

leetcodec语言题解

发布时间: 2023-02-23 19:19:50

⑴ leetcode算法

*最近在做一些 leetcode 的算法题,我会将自己做过的算法题记录下来以供大家参考,如果查找不方便请看 油猴插件实现网站左侧目录生成。

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例:

解答:

     

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例:

提示:

解答:

     

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例:

说明:

解答:

     

给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

示例:

解答:

     

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例:

解答:

     

给定两个数组,编写一个函数来计算它们的交集。

示例:

说明:

进阶:

解答:

     

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例:

解答:

     

给定一个数组 nums ,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

说明:

     

给定一个整数数组 nums 和一个目标值 target ,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

解答:

     

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数独部分空格内已填入了数字,空白格用 '.' 表示。

示例:

说明:

解答:

     

给定一个 *n *× *n* 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。

说明:
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。 请不要 使用另一个矩阵来旋转图像。

示例:

解答:

     

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须 原地修改输入数组 、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例:

解答:

     

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例:

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解答:

     

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

示例:

解答:

     

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同而已,这就属于异位词,

示例:

说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

解答:

     

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明 :本题中,我们将空字符串定义为有效的回文串。

示例:

解答:

     

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:

注意 :假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0 。

提示

示例:

解答:

     

实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始) 。如果不存在,则返回 -1

示例:

说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符

解答:

     

“外观数列”是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:

1 被读作 "one 1" ("一个一") , 即 11 。
11 被读作 "two 1s" ("两个一") , 即 21 。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211 。
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

注意 :整数序列中的每一项将表示为一个字符串。

示例:

解答:

     

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 "" 。

示例:

说明:
所有输入只包含小写字母 a-z 。

解答:

     

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 -- head = [4,5,1,9],它可以表示为:

示例:

说明:

解答:

     

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

说明:
给定的 n 保证是有效的。

进阶:
你能尝试使用一趟扫描实现吗?

解答:

     

反转一个单链表。

示例:

解答:

     

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

解答:

     

请判断一个链表是否为回文链表。

示例:

解答:

     

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1 ,则在该链表中没有环。

示例:

解答:

     

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明 : 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7] ,

返回它的最大深度 3 。

解答:

     

给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:

示例:

解答:

     

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

解答:

     

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例:
二叉树: [3,9,20,null,null,15,7] ,

返回其层次遍历结果:

解答:

     

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:
给定有序数组: [-10,-3,0,5,9] ,
一个可能的答案是: [0,-3,9,-10,null,5] ,它可以表示下面这个高度平衡二叉搜索树:

解答:

     

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:

示例:

解答:

     

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, ..., n] ,你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

示例:

解答:

     

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意 :给定 n 是一个正整数。

示例:

解答:

     

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。
注意 :你不能在买入股票前卖出股票。

示例:

解答:

     

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

解答:

     

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例:

解答:

     

打乱一个没有重复元素的数组。

示例:

解答:

     

设计一个支持 push , pop , top 操作,并能在常数时间内检索到最小元素的栈。

示例:

解答:

     

写一个程序,输出从 1 到 n 数字的字符串表示。

示例:

解答:

     

统计所有小于非负整数 n 的质数的数量。

示例:

解答:

     

给定一个整数,写一个函数来判断它是否是 3 的幂次方。

示例:

解答:

     

罗马数字包含以下七种字符: I , V , X , L , C , D 和 M 。

例如,罗马数字 2 写做 II ,即为两个并列的 1 。 12 写做 XII ,即为 X + II 。 27 写做 XXVII , 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII ,而是 IV 。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX 。这个特殊的规则只适用于以下六种情况:

示例:

解答:

     

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量 )。

示例:

提示:

⑵ LeetCode题解:三数之和

给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0?请你找出所有和为0且不重复的三元组。
注意: 答案中不可以包含重复的三元组。

输入: nums = [-1,0,1,2,-1,-4]
输出: [[-1,-1,2],[-1,0,1]]

我们其实可以将这道题转化为LeetCode两数之和那道题,具体做法如下:
前提条件,我们需要将数组排序。
首先,外层遍历,作为第一个数first,并且将目标数target设置为-nums[first]。
接下来,我们只需要两个双指针second与third,分别指向first+1与最后一个数,两个指针随着遍历向中靠拢。如果nums[second]+nums[third]>target,那么third就左移,否则,second就左移。而second是随着内层遍历而增加的。
因为我们事先将数组进行了排序,所以当内层循环达到second=third时依然找不到答案,那么就跳过内层循环,直接遍历下一个first。

复杂度分析

⑶ LeetCode - 1. 两数之和(C语言)

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

⑷ LeetCode107题C语言报错:Runtime Error,请大神帮助改正代码

printf("%s",n);
要改成
printf("%c",n);

⑸ 【leetcode C语言实现】面试题 02.05-链表求和

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:假设这些数位是正向存放的,请再做一遍。

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

当两个整数相加时,从个位开始,依次将两个数的对应位置进行相加,将所得结果的个位数作为相加后对应位置的结果,若有进位将进位的值在更高一位进行相加。此处两个数是以链表存储,同样的思路,依次将两个数的对应位置进行相加,并将所得结果保存到一个链表中。

运行结果:

⑹ 这道题能解释一下吗

可以,
假设除以4的商为a余数为j,初一3的商为b余数为k
那么可得
n=4a+j
n=3b+k
可以换算成
3n=12a+3j
4n=12b+4k
两式相减得
n=12b+4k-12a-3j
n=12(b-a)+(4k-3j)
即能除以12余4k-3j,所以除以6必定也余4k-3j,如果算出来是负数或者大于6,取正值或者再除以6即可

⑺ 算法面试通关40讲 覃超 Leetcode 题目总结(未完待续)

主要是自己收集的题目,正在学习王争老师的数据与算法结构之美和覃超老师的算法面试通关四十讲,两位老师推荐很经典的面试题。所以为了方便自己,在这里做一个汇总。如果对你有帮助那当然好,或者也可以看参考资料,里面有很多优秀的Github的资源。

参考资料
算法复杂度查看: https://www.bigocheatsheet.com/
C语言解法推荐: https://github.com/begeekmyfriend/leetcode
Java解法推荐: https://github.com/azl397985856/leetcode
数据结构与算法之美(王争)(有各种语言的版本): https://github.com/wangzheng0822/algo
Github 40K star leetcode: https://github.com/azl397985856/leetcode
Github 13K star Leetcode: https://github.com/haoel/leetcode
Github 63K star 用动画的形式呈现解LeetCode题目的思路: https://github.com/MisterBooo/LeetCodeAnimation
python 解法: https://github.com/qiyuangong/leetcode
其他解法: https://github.com/qiyuangong/leetcode

06|面试题:反转一个单链表&判断链表是否有环

数据与算法结构之美:
21 Merge Two Sorted Lists 【 C 】【 python 】
删除链表倒数第 n 个结点 【 Leetcode 的解题 】
求链表的中间结点 Middle of the Linked List

20 Valid Parentheses
232 Implement Queue using Stacks 【 C 】【 My C solution 】
225 Implement Stack using Queues 【 C 】

703 Kth Largest Element in a Stream
239 Sliding Window Maximum

242 Valid Anagram
1 Two Sum 【 C 】
15 3Sum
18 4Sum

98 Validate Binary Search Tree
235 Lowest Common Ancestor of a Binary Search Tree
236 Lowest Common Ancestor of a Binary Tree

50 Pow(x, n)
169 Majority Element

122 Best Time to Buy and Sell Stock II

冒泡排序,选择排序,插入排序,供参考:【 C 】

(未完待续,大概等我做完上面这些就可以继续补充剩下的了吧)

⑻ [LeetCode刷题]算法--双指针

参考: @CyC2018

双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。

167.有序数组的 Two Sum(Easy)
633.两数平方和(Easy)
680.回文字符串(Easy)
88.归并两个有序数组(Easy)
141.判断链表是否存在环(Easy)
524.最长子序列(Medium)
345.反转字符串中的元音字符(Easy)

题目描述:
在有序数组中找出两个数,使它们的和为 target。(不可以重复使用相同的元素)

思路:
使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。

数组中的元素最多遍历一次,时间复杂度为 O(N)。只使用了两个额外变量,空间复杂度为 O(1)。

题目描述:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 。

思路:

题目描述:
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。)

思路:

题目描述:

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

思路:
使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符。

为了快速判断一个字符是不是元音字符,我们将全部元音字符添加到集合 HashSet 中,从而以 O(1) 的时间复杂度进行该操作。

⑼ LeetCode108题C语言报错:Runtime Error free(): invalid pointer: 0x0000000001dea2f0,请大神帮助改正

虽然,我没怎么看懂你的思路。但感觉问题应该是,你申请结点的时候,没有NULL赋值给没有孩子的结点。如果不是NULL,验证程序就会一直遍历~ 仅供参考。。