
leetcode刷题
刷题生活开始
人工智能(篮球方向)
这个作者很懒,什么都没留下…
展开
-
贪心算法(LeetCode-20)-分配饼干
题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj。如果 sj >= gi,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例1:输入: [1,2,3], [1,1]输...原创 2020-09-25 20:59:46 · 432 阅读 · 0 评论 -
leetcode(19)-分隔链表
题目描述:给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例 1:输入:roo.原创 2020-09-18 21:25:26 · 88 阅读 · 0 评论 -
leetcode(18)-回文链表
题目描述:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?题解:方法一:用一个数组把链表值存在来,再进行回文判断即可 算法:创建一个数组把链表值都存起来 遍历数组,判断当前元素i和len-i-1(len表示数组长度)是否相等,若不等返回false 如果都相等返回true代...原创 2020-09-16 23:33:26 · 74 阅读 · 0 评论 -
LeetCode(17)-两数相加
题目描述:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。题解:方法一:因为通常意义的加法是从个位数开始的,所以是从链表的后面往前加的,由于这是两个单链表的相加,在不改变链表的结构前提下,先颠倒两个链表,再进行相加,将结果链表再颠倒。算法:颠倒链表l1,l2.原创 2020-09-15 21:24:08 · 135 阅读 · 0 评论 -
Leetcode(16)-两两交换链表中的节点
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.题解:方法一(递归):从链表的头节点 head 开始递归。 每次递归都负责交换一对节点。由 firstNode 和 secondNode 表示要交换的两个节点。 下一次递归则是传递的是下一对需要交换的节点。若链表中还有节点,则继续递归。.原创 2020-09-14 22:48:53 · 103 阅读 · 0 评论 -
LeetCode日记(15)-删除链表的倒数第N个节点
题目描述:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题解:方法一:思路:两遍扫描。 第一遍计算出链表节点数len。 第二遍删除节点(len-n+1)即可。 ...原创 2020-09-13 11:10:27 · 94 阅读 · 0 评论 -
LeetCode日记(14)-删除有序链表的重复元素
问题描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3题解:思路:因为是有序的链表,所以只要判断相邻的节点是否相同即可:若相同:让当前节点指向下一节点的下一个节点;若不相同:继续遍历当前节点;ps:因为需要取下一节点的值,所以循环判断的时候需要同时判断当前节点和下一节点是否为空,否则..原创 2020-09-12 11:55:02 · 92 阅读 · 0 评论 -
LeetCode日记(13)-颠倒链表
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL题解:思路:颠倒链表后首元素应该变为空,每次遍历链表的节点和下一个节点,将下一个节点改成指向上一个节点即可。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * List原创 2020-09-10 12:24:44 · 171 阅读 · 0 评论 -
LeetCode日记(12)--只出现一次的数字 III
题目描述:给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 :输入: [1,2,1,3,2,5]输出: [3,5]注意:结果输出的顺序并不重要,对于上面的例子,[5, 3]也是正确答案。你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?预备知识:X=X&(-X) :得到二进制X最右边的1,其他位置变为0 。题解:思路: 要取不同的两个数字,已知数组中的相同元素成对存在,...原创 2020-08-23 21:00:26 · 91 阅读 · 0 评论 -
LeetCode日记(11)--之缺失数据(11)
题目:给定一个包含 0, 1, 2, ..., n中n个数的序列,找出 0 .. n中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?题解:方法一:首先我们对数组进行排序,此时我们让已经排序好的数组和其下标(下标表示的是从0开始到n的完整数组)相比,如果不等,则该下标就是缺失的值。代码:clas...原创 2020-08-21 14:27:17 · 100 阅读 · 0 评论 -
LeetCode日记(10)--之数组中唯一一个不重复的元素
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4预备知识:异或运算有以下三个性质。1、任何数和 0做异或运算,结果仍然是原来的数。例如 :x^0 = x 2、任何数和其自身做异或运算,结果是 0。例如:x^x=0 3、异或运算满足交换律和结合..原创 2020-08-20 21:57:24 · 517 阅读 · 0 评论 -
LeetCode日记(9)--之汉明距离
题目描述:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。(统计两个数的二进制表示有多少位不同即可)注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。预备知识:二进制的异或运算:符号是。当a,b两个数做异或运算时,如果两个值不同,则...原创 2020-08-20 17:59:56 · 147 阅读 · 0 评论 -
LeetCode日记(8)--之寻找旋转排序数组中的最小值
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0题解:方法一:直接用暴力解法,遍历数组所有元素,记录最小的元素即可。时间复杂度是O(N)。代码:class Solution {publi...原创 2020-08-18 21:40:03 · 268 阅读 · 0 评论 -
LeetCode日记(7)--之第一个错误的版本
题目描述:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用bool isBadVersion(version)接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:给定 ..原创 2020-08-17 18:18:42 · 112 阅读 · 0 评论 -
LeetCode日记(6)--之有序数组中的单一元素
题目描述:给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: [3,3,7,7,10,11,11]输出: 10题解:方法1:蛮力解法。因为重复数字每个元素只会出现两次,所以我们遍历数组,让当前数和下一个数比较,相同则让下标加2;不相同(单数字)则直接返回。如果在循环遍历中没有返回,则说明单数字在最后一个元素,直接返回最后一个元素即可。时间复杂度为O(n)。原创 2020-08-14 11:52:20 · 270 阅读 · 0 评论 -
LeetCode日记(5)--寻找比目标字母大的最小字母
题目描述:给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = 'z' 并且字符列表为letters = ['a', 'b'],则答案返回'a'示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:letters = ["c", "f", "j"]t...原创 2020-08-14 11:15:37 · 205 阅读 · 0 评论 -
LeetCode日记(4)--之x的平方根
题目描述:实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。题解:方法1:用迭代法求 x=根号a。求平方根的迭代公式为:X(n+1)=(Xn+a/Xn) /2,要求前后两次求出的x的差的绝对值小于 10的负5次幂...原创 2020-08-13 11:32:30 · 181 阅读 · 0 评论 -
LeetCode日记(3)--之寻找两个正序数组的中位数
题目描述:给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5题解:思路:两个有序数组可以在多项式的时间...原创 2020-08-12 11:20:47 · 146 阅读 · 0 评论 -
LeetCode日记(2)--Add Two Numbers
题目描述:You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.You may assume the two numbe原创 2020-08-11 13:56:32 · 124 阅读 · 0 评论 -
LeetCode日记(1)--TWO SUM
题目描述:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.Example:Given nums = [2, 7, 11,原创 2020-08-10 13:35:50 · 130 阅读 · 0 评论