LeetCode
Zzz5270
这个作者很懒,什么都没留下…
展开
-
LeetCode——136. 只出现一次的数字
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4自己的解法用 set 集合 存储 nums;如果添加失败,则说明集合中已存在该元素,remove;最终集合里只剩下唯一的一个元素;(时间复杂度为 O(n),不符合题目要求)class Solution {原创 2021-05-07 10:27:33 · 115 阅读 · 0 评论 -
剑指Offer—— 11. 旋转数组的最小数字
题目如下把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0自己的算法及代码(代码可运行,且提交正确)具体算法如下:给最小值初始化 min=-1;遍历数组,如果满足 numbers[i] > numbers[i+1],原创 2021-03-08 13:21:58 · 115 阅读 · 0 评论 -
剑指Offer—— 21.调整数组顺序使奇数位于偶数前面
题目如下输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。自己的算法和代码(该算法课正确执行和提交,内存消耗较高,主要在创建了一个新的数组存放数据)创建一个新的数组 result[],和两个标志位 first 和 last,分别指向 result[] 的 第 0 个位置,第 nums.length-1 个位置。原创 2021-03-07 12:57:33 · 84 阅读 · 1 评论 -
剑指Offer——39. 数组中出现次数超过一半的数字
题目如下数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2自己的算法及代码看到这个题目,首先想到的是用 Map 去处理。因为,要获取到数组的每个元素,以及他们的出现次数,且 Map 的键不能重复。所以,选择用 HashMap 来进行存储,key 用来放数组中的元素,value 用来放元素出现的次数。算法过程如下:创建 HashMap原创 2021-03-05 13:40:11 · 156 阅读 · 2 评论 -
剑指Offer——15. 二进制中 1 的个数
题目如下:请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制原创 2021-03-04 13:53:18 · 115 阅读 · 2 评论 -
剑指Offer——17. 打印从1到最大的n位数
题目如下输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]自己的算法及代码【注】自己的算法虽然运行正确了,但没有考虑大数情况,原来大数的打印才是这个题考察的重点。。。就说怎么这么简单就写出来了。。。还是先记录一下自己的思路吧按照题目的要求,输出的内容为 [ 1 ~ 10^n-1 ]。所以保存到数组中进行输出就可以了。publi原创 2021-03-03 13:41:22 · 147 阅读 · 0 评论 -
剑指Offer——03. 数组中重复的数字
题目如下找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3自己的算法和代码(结果正确,但提交错误)个人觉得这个题目的难点在于:要求输出任意一个重复的数字。我首先是用了最简单的两层循环,遍历数组,然后比较,把重复的元素输出。但这样的算法运行结果是错的。首先不说原创 2021-03-02 13:24:31 · 155 阅读 · 0 评论 -
剑指Offer——05.替换空格
问题如下请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”自己的算法及代码思路是比较简单的。拆分遍历字符串,找到空格进行替换,然后再依次追加到尾部。这里主要用到的是一些字符串的处理,以及类型转换。比如:将 string 拆成 char 类型,用到 char c = s.charAt(i);char 类型转 string, String.valueOf(c)在字符串尾部追加,s原创 2021-03-01 13:27:14 · 102 阅读 · 0 评论 -
LeetCode——121. 买卖股票的最佳时机
题目如下:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:原创 2020-11-27 10:42:30 · 72 阅读 · 0 评论 -
LeetCode——448. 找到所有数组中消失的数字
题目如下:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]自己的算法及代码如下:首先定义一个 ArrayList,把原数组中的数字全部添加进去;然后遍历 ArrayList,如果原创 2020-11-27 10:22:20 · 250 阅读 · 0 评论 -
LeetCode——283.移动零
题目如下:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。自己的算法及代码如下:首先,选出数组中不为零的元素,并用 count 记录其个数,同时也作为新数组的下标;然后,将不为0的元素向前移动,nums[count] = nums[i];所以得到的数组前 count 个元素都是不为零的,且保持了原数组中的相原创 2020-11-25 21:10:42 · 159 阅读 · 0 评论 -
LeetCode——169.多数元素
题目如下:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2自己的算法及代码如下:看到这个题目,首先想到用 HashMap,但写了一下,没写出来;然后想到 Set 集合元素不重复,就想到了用 HashSet;首先将 nums 中的元素存到 HashSet 里;然后遍历 H原创 2020-11-25 19:38:44 · 219 阅读 · 0 评论 -
LeetCode——1370.上升下降字符串
这个题目的解析看的不是很明白,先记录下来;题目如下:给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从原创 2020-11-25 12:44:52 · 90 阅读 · 0 评论 -
LeetCode——53.最大子序和
不停地筛选题,找了一个简单的数组题,看完题以为很简单就开始写了,然后发现。。。。还是自己会的太少了;其实还是不太明白这个题,先记下来吧;题目如下:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。参考的算法及代码:这道题用到了 动态规划 的思想;假设 nums 数组的长度是 n,下标从 0 到 n - 1原创 2020-11-25 10:35:41 · 127 阅读 · 0 评论 -
LeetCode——21.合并两个有序链表
题目如下:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4自己的算法及代码:创建一个新的链表 l3,用于存放合并之后的链表数据;如果 l1、l2 都不为空,则比较元素大小,将小的先放入 l3;如果 l1为空,则将 l2 元素依次放入 l3;如果 l2为空,则将 l1 元素依次放入 l3;最后返回 l3,(原创 2020-11-24 10:30:58 · 235 阅读 · 0 评论 -
LeetCode——1.两数之和
题目如下:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]自己的算法及代码:对于这道题,自己的思路是:用两层循环,依次遍历数组;任意两个不同的数相加,如果等于目标值,则返回数组下标;原创 2020-11-24 09:00:02 · 74 阅读 · 0 评论 -
剑指Offer——58-Ⅱ.左旋转字符串
题目如下:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”自己的算法及代码:这也是一道简单的题目,算法思想如下:首先,将原字符串的前 n 个字符删除,这里用到了替换函数 replaceAll(a, b) ,用空来替换前面的字符,该函数处理之后只剩下后面的字原创 2020-11-23 10:08:28 · 150 阅读 · 0 评论 -
LeetCode——5605.检查两个字符串数组是否相等
题目如下给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。示例 1:输入:word1 = [“ab”, “c”], word2 = [“a”, “bc”]输出:true解释:word1 表示的字符串为 “ab” + “c” -> “abc”word2 表示的字符串为 “a” + “bc” -> “abc”两个字符串相同,返回 true自原创 2020-11-23 09:08:47 · 197 阅读 · 0 评论 -
LeetCode——1480.一维数组的动态和
第一次刷 LeetCode,找了一个很简单的题,虽然做出来了,但是自己的算法也太复杂了,看了解析,才发现原来真的是很简单;题目如下:给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4]自己的算法及代码:定义一个 int 类型的 nums原创 2020-11-20 21:05:21 · 268 阅读 · 2 评论