刷穿leetocde前两百题
一枚蛋挞
走向一枚程序媛的路上
展开
-
leetcode80-删除有序数组中的重复项
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。思路这个思路参考了leetcode题解大原创 2021-06-06 20:57:28 · 147 阅读 · 0 评论 -
leetcode9-回文数
题目给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。思路数学方法,从低位到高位,计算翻转后的数字与原数字比较大小。但这存在一个问题,如果该整数不是回文数,则翻转后可能存在溢出问题。那么,我们考虑只计算后半段翻转后的数字。比较前半段数字和后半段翻转后的数字是否相等即可。class Solution { public boolean isPalindr原创 2021-04-12 09:08:07 · 106 阅读 · 0 评论 -
leetcode5-最长回文字串
题目给你一个字符串 s,找到 s 中最长的回文子串。思路方法1:中心扩散,遍历元素,找到以该元素为中心的最长回文子串。返回这其中最长的回文子串即可。这里需要注意的是,回文子串可能是奇数也可能是偶数。比如aba奇数,abba偶数。判断的时候,需要先将与当前元素相连的所有左右元素略过。class Solution { public String longestPalindrome(String s) { int l = 0; int r = 0;原创 2021-04-11 18:20:29 · 97 阅读 · 0 评论 -
leetcode3-无重复字符的最长字串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路这道题目,我在第一次做的时候,非常麻烦。原因在于没有把握到不重复字串的本质。什么是不重复字串,1是要连续,2是要不重复。判断是否重复,可以使用哈希表判断。如果当前元素在哈希表中不存在,那就加进去。我们设置一个指针start,用来记录子串的第一个元素。分两种情况1该下标比start大,说明字串中出现了重复元素,截原创 2021-04-10 18:24:03 · 84 阅读 · 0 评论 -
leetcode力扣15-三数之和
题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。思路之前我们做过力扣第一题,两数之和,那里要求我们返回元素下标,我们采用的是哈希表方式进行判断,如果要求返回的是元素,则先对数组排序,头尾双指针移动求和即可。所以这道题,要求我们返回的是具体元素,那很自然可以联想到,可以打乱下标顺序,首先将数组排序。然后遍历元素,固定为第一位,再设置两个指针,指原创 2021-04-10 17:28:25 · 108 阅读 · 0 评论 -
leetcode1两数之和
题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。直接思路此题暴力解法很简单,把所有的数对和求出来进行判断即可,两层循环,时间复杂度为O(N2),空间复杂度为O(1)。 public int[] twoSum(int[] nums, int target) { for(int i = 0;i原创 2021-04-10 15:59:26 · 44 阅读 · 0 评论