
LeetCode
刘夏莱
这个作者很懒,什么都没留下…
展开
-
指 Offer 20. 表示数值的字符串
剑指 Offer 20. 表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是自己暴力解决了: public boolean isNumber(String s) { int i=0; int len=s.length(); int A=0,B=0; System.原创 2020-12-18 11:13:46 · 131 阅读 · 0 评论 -
217. 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。和剑指offer那题还是不同的,那题限制了范围,这题没有 public boolean containsDuplicate(int[] nums) { HashMap<Integer,Integer> res=new HashMap<Integer,Integer>(); for(int num:nums) { r原创 2020-12-13 14:43:34 · 112 阅读 · 1 评论 -
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )这题的表现形式有点奇怪 Stack<Integer> s1; Stack<Integer> s2; public CQueue() { s1=new Stack<Integer>(); s2=new Stack&l原创 2020-12-12 18:24:40 · 146 阅读 · 0 评论 -
剑指8.二叉树的下一个节点
public TreeNode nextNode(TreeNode root, TreeNode one) { if(one.right!=null) { TreeNode p=one.right; while(p.left!=null) { p=p.left; } return p; } else { //如这个节点没有右子树 if(one.father.left==one) { //如果他是左孩子 return one.fathe.原创 2020-12-12 17:50:15 · 108 阅读 · 0 评论 -
842. 将数组拆分成斐波那契序列
给定一个数字字符串 S,比如 S = “123456579”,我们可以将它分成斐波那契式的序列 [123, 456, 579]。形式上,斐波那契式序列是一个非负整数列表 F,且满足:0 <= F[i] <= 2^31 - 1,(也就是说,每个整数都符合 32 位有符号整数类型);F.length >= 3;对于所有的0 <= i < F.length - 2,都有 F[i] + F[i+1] = F[i+2] 成立。另外,请注意,将字符串拆分成小块时,每个块的数字一定原创 2020-12-08 11:05:13 · 125 阅读 · 0 评论 -
861. 翻转矩阵后的得分
有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。1.我看了一遍解题分析写的:public int matrixScore(int[][] A) { for(int i=0;i<A.length;i++) {//有多少行 if(A[i][0]==0) { t原创 2020-12-07 11:03:38 · 101 阅读 · 0 评论 -
659. 分割数组为连续子序列
分割数组为连续子序列给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。1.哈希表+最小堆 public boolean isPossible(int[] nums) { Map<Integer,PriorityQueue<Integer>>map=new HashMap<Integer,PriorityQueue<Integer>>(); //哈希表的.原创 2020-12-04 13:03:00 · 152 阅读 · 0 评论 -
204. 计数质数
统计所有小于非负整数 n 的质数的数量。我自己写的暴力循环: public int countPrimes(int n) { int count=0; for(int i=2;i<n;i++) {//0和1特别关注,他们不是质数 if(iszhi(i)) { count++; } } return count; } public static Boolean iszhi(int num) { int count=0; for(int k=原创 2020-12-03 12:09:38 · 97 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? public int[] searchRange(int[] nums, int target) { int local=reseach(nums,target); if(local==-1).原创 2020-12-01 13:41:28 · 88 阅读 · 0 评论 -
767. 重构字符串
给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。 public String reorganizeString(String S) { if(S.length()<2) { return S; } int[]counts=new int[26]; int maxCount=0; int length=S.length(); for(int i=0;i<length;i++) {原创 2020-11-30 11:02:52 · 92 阅读 · 0 评论 -
454. 四数相加 II
四数相加 II给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。public int fourSumCount(int[] A, int[] B, int[] C, int[] D) { .原创 2020-11-27 14:32:00 · 118 阅读 · 0 评论 -
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 public int lengthOfLongestSubstring(String s) { HashSet<Character> occ=new HashSet<Character>();//哈希集和 int n=s.length(); int tail=0,res=0; for(int i=0;i<n;i++) { if(i!=0) {//改变哈希表,左指针往右走原创 2020-11-26 12:45:57 · 108 阅读 · 0 评论 -
1370. 上升下降字符串
上升下降字符串给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从 s 中选择字符。重复步骤 1 到 .原创 2020-11-30 10:48:46 · 104 阅读 · 0 评论