自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 leetcode 45 跳跃游戏II

如果要考虑所有情况在得到结果显然耗费太多时间,既然要最少跳跃次数,即每一跳的可达范围要最大,例如2,3,1,1,4.第一跳可达3,1两个位置,所以在一步之内可达3,1;然后选出3,1,两个位置那个可以到达更远的距离,得到第二步可达的范围,依次类推知道可达范围包含终点。 class Solution { public int jump(int[] nums) { if(nums.length == 1) return 0; int reach = 0; ...

2020-05-29 23:28:24 99

原创 leetcode 44 通配符匹配

这道题就按模拟逻辑做就可以,不过要注意*是可以作为空字符的,如果在完成匹配后p还有字符要判断是否为*。 class Solution { public boolean isMatch(String s, String p) { int i = 0,j = 0,s1 = 0,p1 = -1; int sl = s.length(); int pl = p.length(); while(i<sl){ ..

2020-05-29 23:13:15 117

原创 leetcode 35 搜索插入位置

最差情况遍历一遍,不过应该较容易想到二分法,只要注意边界就行。 class Solution { public int searchInsert(int[] nums, int target) { int length = nums.length; if(length==0){ return 0; }else if(length==1){ if(nums[0]>=target){ ..

2020-05-28 22:23:46 119

原创 leetcode34. 在排序数组中查找元素的第一个和最后一个位置

二分法找到目标值后,将两指针一个前移一个后移即可。 class Solution { public int[] searchRange(int[] nums, int target) { int[] a = {-1, -1}; if(nums.length==0){ return a; }else if(nums.length==1){ if(nums[0]==target){ ..

2020-05-27 22:13:26 87

原创 leetcode 33. 搜索旋转排序数组

class Solution { int [] nums; int target; public int index(int left,int right){ if(nums[left]<nums[right]){ return 0; } while(left<=right){ int temp = (left+right)/2; if(nums[...

2020-05-27 22:08:44 72

原创 leetcode 32 最长有效括号

括号匹配就容易想到的就是用栈或队列,这个方法就是ArrayDeque,每次将"("的位置存储进去,遇到")"时弹出最近加入的左括号的位置,计算此次右括号位置与之前的左括号的位置的差值即可得到长度,保留最长长度即可。 class Solution { public int longestValidParentheses(String s) { if (s == null || s.length() == 0) return 0; Deque<Intege...

2020-05-27 22:03:25 84

原创 leetcode 28 实现strStr()

class Solution { public int strStr(String haystack, String needle) { if(haystack==null||needle==null||needle.length()==0){ return 0; } if(haystack.length()<needle.length()){ return -1; } ...

2020-05-21 16:54:36 66

原创 Leetcode 27 移除元素

跟26题一样使用双指针 class Solution { public int removeElement(int[] nums, int val) { if(nums.length==0)return 0; int i=0; for(int j=0;j<nums.length;j++){ if(nums[j]!=val){ nums[i]=nums[j]; ..

2020-05-21 16:51:23 61

原创 leetcode 26 删除排序数组中的重复项

双指针,前指针更新数组,后指针遍历。 class Solution { public int removeDuplicates(int[] nums) { if(nums.length==0)return 0; int i=0; for(int j=1;j<nums.length;j++){ if(nums[i]!=nums[j]){ i++; num..

2020-05-21 16:48:44 56

原创 leetcode 24 两两交换链表中的节点

采用递归的方法,每次两两交换节点,然后指向下一个两两交换完成的节点。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode swapPairs(ListNode head) ...

2020-05-20 21:43:04 94

原创 leetcode 23 合并K个排序链表

正好之前有合并两个排序链表,首先想到就是一条一条合并,但是这样多一条链表就相当于多了n次合并,可以两两合并然后再将所有的链表合并,将链表一分为二,相互两两合并直至只有一条链表。我采取的顺序是0+n/2,1+n/2+1......这样合并最终数组的第一个链表即为所求 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListN..

2020-05-20 21:35:45 81

原创 leetcode 22 括号生成

画出所有情况 class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList(); back(result,"",0,0,n); return result; } public void back(List<String> result,String c...

2020-05-20 21:05:59 62

原创 Leetcode 21. 合并两个有序链表

比较大小然后合并就好了 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ...

2020-05-19 21:05:10 91 1

原创 Leetcode 19 删除链表的倒数第N个节点

正常想法是先获取到链表长度,再计算出需要删除节点的位置。但是要求扫描一趟,我们可以使用双指针,两个指针的间隔为n,当后面的指针到末尾的时候,利用前面的指针删除节点即可 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution {..

2020-05-19 21:00:57 76

原创 leetcode 15 三数之和

第一个想到的方法就是暴力,三层for循环,但是这样会超时,时间复杂度O(n3)太高了,其实根据示例的答案就可以看出,进行排序,排序之后负数在前正数在后,而且大的负数要跟小的正数匹配,所以可以用双指针,一个在前一个在后。注意一些去重,和提前结束循环的地方即可 class Solution { public static List<List<Integer>> threeSum(int[] nums) { List<List<Integer&g..

2020-05-17 22:43:14 67

原创 leetcode 14 最长公共前缀

因为是公共前缀,所以可以用第一个字符串来与其他字符串比较,然后保留最小公共值即可。注意:如果当前字符串长度小于最小公共长度,最小公共值在进行字符比较之前要更新。 class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length==0){ return ""; } int l = strs[0].length(); ..

2020-05-17 22:26:35 72

原创 Leetcode 13 罗马数字转整数

本题跟上一题是相似的区分情况即可,数字小的在前就是减,在后就是加。 class Solution { public int romanToInt(String s) { if (s == null || s.length() == 0) return -1; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); map.put(...

2020-05-17 22:05:36 65

原创 Leetcode 12 整数转罗马数字

题目描述: 罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+...

2020-05-15 23:14:53 81

原创 leetcode 11 盛最多水的容器

题目描述: 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且n的值至少为 2。 看到题目可以想到木桶原理,即盛水的多少取决予短的木板,在开始时保证宽度最宽,然后每次更换两边较短的木板,即可保证遍历到最大值。 class Solution { public int...

2020-05-15 23:05:22 71

原创 Leetcode 10 正则表达式匹配

题目描述: 给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。 说明: s可能为空,且只包含从a-z的小写字母。 p可能为空,且只包含从a-z的小写字母,以及字符.和* 相较于判断两个字符串是否相同,无非是多了两个字符来表示特殊情况,尤其是*,*可以代表多个前一个字符。所以每次只需比较后n个字符即可。容易想到...

2020-05-15 22:58:24 62

原创 leetcode 9 回文数

题目描述: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 回文数就是将数字对折即可,所以可以将后半段数字与前半段比较即可。 class Solution { public boolean isPalindrome(int x) { if(x<0||(x%10==0&&x!=0)){ return false; } int rn = 0; wh

2020-05-14 21:53:38 49

原创 leetcode 6 Z字变换

题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 直接根据Z字形的顺序访问字符串即可, class Solution { public String convert(Stri...

2020-05-14 21:43:28 82

原创 LeetCode 4 寻找两个正序数组的中位数

题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组nums1和nums2。 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。 你可以假设nums1和nums2不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 因为两个数组都是正序数组,所以中位数可以直接根据顺序找到中间的一个或两个数字(根据奇偶区别)即可。 class Solution { public do...

2020-05-14 21:39:40 363

原创 Leetcode 3 无重复字符的最长子串

题目描述: 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 看到这种判断是否重复的,一般都会想到用map,可以快速判断是否存在已有元素。这题也很适合使用map,将字符存入map中,当存在已有元素是计算出当前无重复的个数,然后从重复字符的重新计数。 class Solution { public int lengthOfLongestSubstrin...

2020-05-13 22:47:42 58

原创 leetcode 2 两数相加

题目描述: 给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 分析:因为链表是逆序存储的,所以是从个位开始存...

2020-05-13 22:36:48 86

原创 Leetcode 1 两数之和

题目描述: 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 1.最初做这道题首先想到就是暴力,遍历所有情况找到答案。 class Solution { public...

2020-05-13 22:25:31 65

原创 页面跳转后滚动条置顶

滑动滚动条后,再跳转页面,新页面绘制在此标签内的话,此时滚动条状态会被记录,不会重置。可能造成页面显示不全等问题。 选取滚动条所在标签,可以在OnInit或者AfterViewInit调用scrollTop等方法可以重置滚动条。 例如 $('.scrollable-container').scrollTop(0). 也可修改其属性例如$('.scrollable-contai...

2019-12-05 16:01:06 1159

原创 leetcode 42. 接雨水

本题可以通过先从一个方向遍历,同时记录遇到的最高柱(即最大数),使用这个数减去遍历到的数得到应该接到的雨水。累加这些数。当遇到的最后一块柱不是最高柱时,用最高柱的位置与数组长度的距离乘最高柱的高度。然后再反向遍历直到最高柱,遍历过程与之前相同,同时每次要加上柱高,因为之前减去的数包含了柱高。 class Solution { public int trap(int[] height) ...

2019-07-18 19:25:07 57

原创 LeetCode - 字符串转整数(atoi)

class Solution { public int myAtoi(String str) { String st = str.replaceAll(" ",""); int l = st.length(); int sign = 1; if(l==0){ return 0; ...

2018-09-07 16:30:12 139

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除