
leetcode
lucky52529
跳出自己的舒适区
展开
-
[leetcode]——哪桶水有毒
有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在15分钟内死去。如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?进阶:假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出“有毒”水桶?n只水桶里有且仅有一只有毒的桶。**分析你现在拥有一头猪,这头猪去喝水,如果他喝...原创 2018-12-20 00:04:01 · 3484 阅读 · 3 评论 -
[leetcode]——重建二叉树
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果#include<stdio.h>#include<stdlib.h>#include<malloc.h>...原创 2018-12-16 15:18:46 · 168 阅读 · 2 评论 -
[leetcode]——复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。ps:要求返回这个链表的深度拷贝/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * struct RandomListNod...原创 2018-12-13 22:37:16 · 385 阅读 · 0 评论 -
[leetcode]——另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3/ \4 5/ 1 2给定的树 t:4/ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。示例 2:给定的树 s: 3...原创 2018-12-10 21:26:28 · 362 阅读 · 0 评论 -
[最长回文串]——最长回文串
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:“abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。int longestPalindrome(char* s...原创 2018-12-06 15:43:56 · 316 阅读 · 0 评论 -
[leetcode]——数字转换为十六进制数
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。给定的数确保在32位有符号整数范围内。不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。...原创 2018-12-06 15:20:51 · 918 阅读 · 0 评论 -
[leetcode]——回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1-&gt;2输出: false示例 2:输入: 1-&gt;2-&gt;2-&gt;1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题方法一:逆置链表解释:回文结构实际上就是将这个链表反转过来还是与原来相同,所以我们可以将链表先进行反转然后与原链表比较,但是我们这里得与原链表比较所...原创 2018-12-05 15:56:59 · 280 阅读 · 2 评论 -
[leetcode]——反转字符中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: “hello”输出: “holle”示例 2:输入: “leetcode”输出: “leotcede”使用双指针遍历一遍即可bool checkchar(char c){ return c == 'a' | c == 'e' | c == 'i' | c == 'o' |...原创 2018-12-04 14:18:26 · 617 阅读 · 0 评论 -
[leetcode]——删除链表的倒数第K个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ ListNode*...原创 2018-12-03 18:15:13 · 1077 阅读 · 0 评论 -
[leetcode]——环形链表||
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。代码如下struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)//代码比较长其实//只有三部分{ int lenA = 0,lenB = 0,gap = 0;//...原创 2018-12-02 21:35:27 · 253 阅读 · 0 评论 -
[数据结构]——环形链表
给定一个链表,判断链表中是否有环拿到这道题其实我相信很多同学已经看过官方的解答了快慢指针法:在返回单链表的中间节点其实我们就已经使用过这个办法了,让fast指针一次走俩步,让slow指针一次走一步。你可以假想俩个人同时在操场上跑步,快的那个人假设一直比慢的快,那么在不久后他们肯定会相遇,于是判断有没有环有了下面代码bool hasCycle(struct ListNode *head) {...原创 2018-12-02 20:40:56 · 303 阅读 · 0 评论 -
[leetcode]——相交链表
编写一个程序,找到两个单链表相交的起始节点。例如,下面的两个链表:A: a1 → a2↘c1 → c2 → c3↗B: b1 → b2 → b3在节点 c1 开始相交。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存...原创 2018-12-02 20:20:28 · 161 阅读 · 1 评论 -
[leetcode]——返回单链表中第k个节点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next...原创 2018-12-01 13:09:54 · 1769 阅读 · 0 评论 -
[leetcode]——移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode* cur = ...原创 2018-12-01 12:48:59 · 442 阅读 · 0 评论 -
[leetcode]——买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不...原创 2018-11-26 21:18:30 · 347 阅读 · 0 评论 -
[leetcode]——爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。3. 1 阶 + 1 阶 + 1 阶4. 1 阶 + 2 阶...原创 2018-11-22 20:51:18 · 303 阅读 · 0 评论 -
[leetcode]——x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。方法一:二分法假如我们求得是16的平方根,那么为四,我们将16一分为二,8的...原创 2018-11-22 20:47:34 · 324 阅读 · 0 评论 -
[leetcode]——加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321 int...原创 2018-11-22 20:22:51 · 221 阅读 · 0 评论 -
[leetcode]——最后一个单词的长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: “Hello World”输出: 5笔者拿到这道题时也算是入坑了,很多同学应该也会和我一样理解为”a空格“返回零,其实他返回的是1,他这里只在乎最后一个单词的长度并不在乎空格在哪里。int leng...原创 2018-11-21 21:24:30 · 158 阅读 · 0 评论 -
[leetcode]——最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。int maxSubArray(int* nums, int numsSize){ int i = 0; int j = 0; ...原创 2018-11-21 21:20:29 · 237 阅读 · 0 评论 -
[leetcode]——报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整...原创 2018-11-21 21:15:29 · 403 阅读 · 0 评论 -
[leetcode]——搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0...原创 2018-11-21 21:08:29 · 214 阅读 · 0 评论 -
[leetcode]——实现strstr
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = ...原创 2018-11-20 15:54:48 · 407 阅读 · 0 评论 -
[leetcode]——移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素...原创 2018-11-20 15:40:39 · 584 阅读 · 0 评论 -
[leetcode]——删除数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 n...原创 2018-11-20 15:29:02 · 181 阅读 · 0 评论 -
[leetcode]——有效的括号
ps:因为笔者也是个刚接触编程语言的菜鸟,所以这里的文章都是拿c语言写的,如果同学们想拿其他语言可以在读懂原理之后用其他语言书写给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: tru...原创 2018-11-20 15:21:57 · 143 阅读 · 0 评论 -
[leetcode]——最长公共前缀
ps:因为笔者也是个刚接触编程语言的菜鸟,所以这里的文章都是拿c语言写的,如果同学们想拿其他语言可以在读懂原理之后用其他语言书写编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”...原创 2018-11-20 15:11:36 · 328 阅读 · 0 评论 -
[leetcode]——整数反转
ps:因为笔者也是个刚接触编程语言的菜鸟,所以这里的文章都是拿c语言写的,如果同学们想拿其他语言可以在读懂原理之后用其他语言书写给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21int reverse(int x) {//笔者开始也不懂...原创 2018-11-20 14:56:21 · 8799 阅读 · 2 评论 -
[leetcode]——俩数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]拿到题我们可以利用双指针的思想,定义一个快变...原创 2018-11-20 14:47:40 · 814 阅读 · 0 评论 -
[leetcode]——罗马数字转整数
罗马数字中有这7个字符I 1V 5X 10L 50C 100D 500M 1000I表示1,II表示2,但4表示方法为IV,5为V,7是VII,90为XL,所以有下面的几种特殊情况:I 可以放在 V (5) 和 ...原创 2018-11-15 20:34:18 · 1378 阅读 · 0 评论 -
[leetcode]——回文数
回文数:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数举例:121 , 12321 ,1221,12233221都为回文数(对称的),120不为回文数,负数不为回文数判断的方法:1.我们可以旋转一半原数字,比如1221旋转一半之后为12 ,旋转了俩次,每旋转一次我们都给,原数字除以10,所以原数字为12,俩个数相等,所以这个数字为回文数**2.**但是我们发现如果是12321时...原创 2018-11-15 19:39:11 · 792 阅读 · 0 评论 -
[leetcde]——喝汽水
代码直接奉上#include<stdio.h>int main(){ int cash = 20; int total =cash ; int empty = cash; while(empty > 1) { total += empty / 2;//你现在的空瓶子可以换几瓶 empty = empty / 2 + empty % 2;//你有多...原创 2018-11-14 11:43:39 · 458 阅读 · 0 评论 -
[leetcode]——只出现一次的数字
#include<stdio.h>int main(){ int i = 0; int ret = 0;//接受整个数组异或的最终值 int pos = 0;//标记哪个位置先出现1 int x = 0,y = 0; int arr[] = {1,1,2,2,4,4,8,9}; for(i = 0; i < sizeof(arr)/sizeof(arr[0])...原创 2018-11-14 11:24:38 · 181 阅读 · 0 评论 -
[leetcode]——判断旋转字符串
给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.拿到题目,经过思考其实我们可以将题目的思路转化为,将s1每次旋转一次来和s2比较大小,相同则返回1,不同则返回0,将s1旋转strlen(s1)次即可完成比较,这里其实大家不用考虑左旋还是右旋的问题,因为旋转是对称的,左旋一次就相当于右旋len-1次。我们写出了以下代码。#include&lt;s...原创 2018-11-14 10:55:53 · 729 阅读 · 0 评论 -
[leetcode]——员工排序
这道题给定的年龄范围其实在0-99之间,是一个很小的数字范围,所以我们可以考虑使用辅助空间来对这些年龄进行排序#include&lt;stdio.h&gt;void Sortage(int ages[], int len){ int age = 0; int i = 0; int j = 0; int index = 0; int oldestage = 0; int timeo...原创 2018-11-13 18:46:50 · 543 阅读 · 0 评论 -
[leetcode]——替换空格
我们拿到这样一道题的时候最简单的方法是当字符串遇到空格时我们将空格替换为百分之20,但是空格是一个字符,而我们所要替换的%20为三个字符,这样如果我们有俩个空格我们就要把字符移动俩次,这样从效率上来说并不是很高。所以我们想到可以计算出替换后字符串的长度,创建一个辅助空间让字符一个一个移动到新建的空间上来,这样虽然创建了辅助空间但是从效率上来说就比前一种方法好的很多#include<std...原创 2018-11-13 16:49:08 · 668 阅读 · 0 评论 -
[leetcode]——寻找重复数字
在一个长度为n+1的数组里所有的数字都在1-n的范围内,所以数组的中至少有一个数字是重复的。请找出数组中重复的数字,但是不可以修改数组。1.定义start和end,找到数组的中间值middle2.统计start到middle中count的数字,如果count大于middle-start+1,说明重复的数字在左半范围,让middle成为end3.相反则middle成为start4.当end等...原创 2018-11-12 23:36:54 · 229 阅读 · 0 评论 -
[leetcode]——数组中重复的数字
在一个长度为n的数组里所有的数字都在0-n-1的范围里。数组某些数字是重复的,但是不知道有几个数字重复了,也不知道重复了几次。请找出数组中重复的数字1.首先判断数组指针是否为空,判断数组的长度是否为边界值2.进行循环判断数组中的数字有没有没有满足题意的3.进行for循环判断每个数是否等于自己的下标4.不相等的进行交换5.假设下标为5的数字等于下标为2的数字那么找出一个重复的数字#inc...原创 2018-11-12 21:25:14 · 191 阅读 · 0 评论