Java-LeetCode
文章平均质量分 71
Telescope@moon
这个作者很懒,什么都没留下…
展开
-
Effective Java——第一条:用静态工厂方法代替构造器
总共讲述了静态工厂方法的五大优势和两个缺点优势1. 静态工厂方法有名称(用Boolean类来举例)java手册链接这是我常用的java手册,虽然有时候翻译很不好,但是看一些方法和属性很便捷上面两张图是Boolean类的构造方法和静态方法(返回值是Boolean的是其静态工厂方法),可以看到几点区别和相同点1.构造方法没有名称,静态工厂方法有名称2.构造方法和静态工厂方法返回的对象都是Boolean这时候就凸显了静态工厂的优点,我们可以通过名称看出来我们调用这个方法的要干嘛。2. 在原创 2021-04-16 17:43:20 · 193 阅读 · 0 评论 -
对Map排序涉及到Comparator的用法
Java语言利用Collections.sort对Map,List排序TreeMap排序Map<String, String> treeMap = new TreeMap<String, String>(new Comparator<String>() { public int compare(String o1, String o2) { // 升序排序 return o1.原创 2021-04-14 11:56:47 · 551 阅读 · 0 评论 -
优先队列的比较器
PriorityQueue<Map.Entry<Integer,Integer>> queue = new PriorityQueue<>(new Comparator<Map.Entry<Integer,Integer>>(){ @Override public int compare(Map.Entry<Integer,Integer> o1,Map.Entry<Integer.原创 2020-11-05 10:31:03 · 651 阅读 · 0 评论 -
LeetCode 347 前K个高频元素
class Solution { public int[] topKFrequent(int[] nums, int k) { HashMap<Integer,Integer> map = new HashMap<>(); PriorityQueue<Map.Entry<Integer,Integer>> queue = new PriorityQueue<>(new Comparator<Map.E.原创 2020-11-03 10:01:28 · 65 阅读 · 0 评论 -
LeetCode 394 字符串解码
1.class Solution { int index=0; public String decodeString(String s) { return analysis(s); } public String analysis(String s){ StringBuilder sb = new StringBuilder(); int num=0; String temp; while.原创 2020-11-01 12:10:37 · 137 阅读 · 0 评论 -
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
1.自己的解法,二分法,但是比较笨class Solution { public int[] searchRange(int[] nums, int target) { if(nums.length==0) return new int[]{-1,-1}; int left=0,right=nums.length-1; int[] res = new int[2]; while(left<right&&(nu原创 2020-10-20 11:23:38 · 54 阅读 · 0 评论 -
LeetCode 153 寻找旋转排序数组中的最小值
class Solution { public int findMin(int[] nums) { if(nums.length==1) return nums[0]; int left=0,right=nums.length-1; while(left<right){ int mid=(left+right)/2; if(nums[mid]<nums[right]){ .原创 2020-10-18 15:31:21 · 87 阅读 · 0 评论 -
LeetCode 33 搜索旋转排序数组
class Solution { public int search(int[] nums, int target) { if(nums.length==0) return 0; if(nums.length==1) return nums[0]==target?0:-1; int left=0,right=nums.length-1; while(left<=right){ int mid=(left+.原创 2020-10-17 16:24:23 · 64 阅读 · 0 评论 -
LeetCode 278 第一个错误的版本
public class Solution extends VersionControl { public int firstBadVersion(int n) { int left=1,right=n,mid; while(left<right){ mid=left+(right-left)/2; if(isBadVersion(mid)) right=mid; else left...原创 2020-10-16 11:28:29 · 50 阅读 · 0 评论 -
LeetCode 376 摆动序列
1.自己的解法class Solution { public int wiggleMaxLength(int[] nums) { if(nums.length==0) return 0; int count=1,up=1,down=1; for(int i=1;i<nums.length;i++){ if(nums[i]>nums[i-1]){ up=1;原创 2020-10-16 10:23:45 · 62 阅读 · 0 评论 -
LeetCode 75 颜色分类 283 移动零
1.双指针class Solution { public void sortColors(int[] nums) { int p0=0,p1=0; for(int i=0;i<nums.length;i++){ if(nums[i]==1){ int temp = nums[i]; nums[i] = nums[p1]; nums[p1]原创 2020-10-15 11:39:58 · 53 阅读 · 0 评论 -
LeetCode 228 汇总区间
class Solution { public List<String> summaryRanges(int[] nums) { List<String> res = new ArrayList<>(); if(nums.length==0) return res; int L=nums[0],R=nums[0],i; for(i=1;i<nums.length;i++){ ...原创 2020-10-14 10:27:39 · 61 阅读 · 0 评论 -
LeetCode 152 乘积最大子数组
1.动态规划数组class Solution { public int maxProduct(int[] nums) { int[][] dp = new int[nums.length][2]; dp[0][0]=nums[0]; dp[0][1]=nums[0]; for(int i=1;i<nums.length;i++){ if(nums[i]>=0){原创 2020-10-13 11:22:09 · 84 阅读 · 0 评论 -
LeetCode 238 除自身以外的数组乘积
1.左右乘积class Solution { public int[] productExceptSelf(int[] nums) { int n=nums.length,R=1; int[] res = new int[n]; res[0]=1; for(int i=1;i<n;i++){ res[i]=nums[i-1]*res[i-1]; } for(int i.原创 2020-10-12 10:35:16 · 65 阅读 · 0 评论 -
LeetCode 209 长度最小的子数组
1.题解 双指针class Solution { public int minSubArrayLen(int s, int[] nums) { int sum=0,start=0,end=0,max=Integer.MAX_VALUE; while(end<nums.length){ sum+=nums[end]; while(sum>=s){ max=Math.min(原创 2020-10-12 09:16:26 · 60 阅读 · 0 评论 -
LeetCode 53 最大子序和
1.贪心算法class Solution { public int maxSubArray(int[] nums) { int max=nums[0]; for(int i=1;i<nums.length;i++){ if(nums[i-1]>0) nums[i]+=nums[i-1]; max=Math.max(max,nums[i]); } return max;原创 2020-10-11 11:55:53 · 63 阅读 · 0 评论 -
LeetCode 239 滑动窗口最大值
1.暴露class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int[] res = new int[nums.length-k+1]; if(nums.length==1||k==1) return nums; int n=0; for(int i=0;i<=nums.length-k;i++){ int max=nu原创 2020-10-11 11:48:20 · 46 阅读 · 0 评论 -
LeetCode 56 合并区间
1.按首元素排序class Solution { public int[][] merge(int[][] intervals) { if(intervals.length==0) return new int[0][2]; Arrays.sort(intervals,new Comparator<int[]>(){ public int compare(int[] intervals1,int[] intervals2){原创 2020-10-10 11:48:16 · 71 阅读 · 0 评论 -
LeetCode 135 分发糖果
1.暴力解法class Solution { public int candy(int[] ratings) { int sum=0; int[] candies = new int[ratings.length]; Arrays.fill(candies,1); boolean flag=true; while(flag){ flag=false; for(int原创 2020-10-09 11:02:10 · 57 阅读 · 0 评论 -
LeetCode 287 寻找重复数
1.自己的做法class Solution { public int findDuplicate(int[] nums) { int i; for(i=0;i<nums.length;i++){ while(nums[i]!=i+1&&nums[i]!=nums[nums[i]-1]){ int temp=nums[i]; nums[i]=nums[te原创 2020-10-08 15:38:53 · 58 阅读 · 0 评论 -
LeetCode 164 最大间距
1.这个排序+比较class Solution { public int maximumGap(int[] nums) { if(nums.length<2) return 0; Arrays.sort(nums); int max=0; for(int i=1;i<nums.length;i++){ max=Math.max(max,nums[i]-nums[i-1]); }原创 2020-10-08 14:53:51 · 61 阅读 · 0 评论 -
LeetCode 334 递增的三元子序列
1.哎,出错了好多次class Solution { public int longestConsecutive(int[] nums) { if(nums.length==0) return 0; if(nums.length==1) return 1; Arrays.sort(nums); int max=0,pos=0,i,k=0; for(i=1;i<nums.length;i++){原创 2020-10-07 12:13:57 · 48 阅读 · 0 评论 -
LeetCode 334 递增的三元子序列
1.这个题看的题解class Solution { public boolean increasingTriplet(int[] nums) { if(nums.length<3) return false; int small=Integer.MAX_VALUE,mid=Integer.MAX_VALUE; for(int i=0;i<nums.length;i++){ if(nums[i]<small原创 2020-10-07 11:13:22 · 56 阅读 · 0 评论 -
LeetCode 42 接雨水
1.自己的解法class Solution { public int trap(int[] height) { if(height.length==0) return 0; int left=0,right=height.length-1,count=0,maxl=height[0],maxr=height[height.length-1]; while(left<right){ if(height[left]<原创 2020-10-06 11:21:57 · 52 阅读 · 0 评论 -
LeetCode 11 盛最多水的容器
1.双指针class Solution { public int maxArea(int[] height) { int left=0,right=height.length-1,max=0; while(left<right){ int count=(right-left)*Math.min(height[left],height[right]); max=Math.max(max,count);原创 2020-10-06 10:15:41 · 57 阅读 · 0 评论 -
LeetCode 714 买卖股票的最佳时机含手续费 + 309 最佳买卖股票时机含冷冻期
class Solution { public int maxProfit(int[] prices, int fee) { if(prices.length==0) return 0; int dp_i_0=0,dp_i_1=Integer.MIN_VALUE,temp; for(int i=0;i<prices.length;i++){ temp=dp_i_0; dp_i_0=Math.max(.原创 2020-10-05 16:41:58 · 58 阅读 · 0 评论 -
LeetCode 188 买卖股票的最佳时机|V
1.真的好烦了看见这个题,就其实是把“买卖股票的最佳时机III”的dp方法的k=2改为题上的k就OK但是,会报错,超内存然后,看了题解,一次交易由买入和卖出构成,至少需要两天。所以说有效的限制 k 应该不超过 n/2,如果超过,就没有约束作用了,相当于 k = +infinity。就是“买卖股票的最佳时机II”的情况 k=+无穷然后我就拼凑了两种方法在一起,也不知道其他大神怎么来的,但是这个系列把我折磨死了class Solution { public int maxP原创 2020-10-05 16:20:45 · 81 阅读 · 0 评论 -
LeetCode 123 买卖股票的最佳时机|||
1.根据前面两个题的动态规划思想做的class Solution { public int maxProfit(int[] prices) { if(prices.length==0) return 0; int[][][] dp = new int[prices.length][3][2]; for(int i=0;i<prices.length;i++){ for(int k=1;k<3;k++){ .原创 2020-10-05 16:02:33 · 48 阅读 · 0 评论 -
LeetCode 122 买卖股票的最佳时机||
1.自己的做法class Solution { public int maxProfit(int[] prices) { int out=0; for(int i=1;i<prices.length;i++){ if(prices[i]>prices[i-1]){ out+=prices[i]-prices[i-1]; } } return原创 2020-10-05 11:58:54 · 90 阅读 · 0 评论 -
LeetCode 121 买卖股票的最佳时机
1.自己的做法class Solution { public int maxProfit(int[] prices) { if(prices.length==0) return 0; int in=prices[0],out=0; for(int i=1;i<prices.length;i++){ if(prices[i]>in&&prices[i]-in>out){原创 2020-10-05 11:27:02 · 57 阅读 · 0 评论 -
LeetCode 45 跳跃游戏||
1.递归+贪心算法class Solution { public int jump(int[] nums) { if(nums.length==1) return 0; return cJ(nums,0,0); } public int cJ(int[] nums,int begin,int count){ if(begin+nums[begin]>=nums.length-1) return count+1;原创 2020-10-04 15:52:34 · 71 阅读 · 0 评论 -
LeetCode 55 跳跃游戏
1.自己的做法,递归class Solution { public boolean canJump(int[] nums) { return cJ(nums,0); } public boolean cJ(int[] nums,int begin){ int max=0,pos=begin; for(int i=begin+1;i<nums.length&&i<=begin+nums[begin];i+原创 2020-10-04 15:01:27 · 69 阅读 · 0 评论 -
LeetCode 220 存在重复元素|||
1.暴力class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if(k==10000) return false; for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.length&&j<=i+k;j++){ .原创 2020-10-03 16:22:00 · 56 阅读 · 0 评论 -
LeetCode 219 存在重复元素||
1.线性搜索class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.length&&j<=i+k;j++){ if(nums[i]==nums[j]) return true;原创 2020-10-03 13:44:46 · 46 阅读 · 0 评论 -
LeetCode 217 存在重复元素
1.第一种排序,循环class Solution { public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); for(int i=1;i<nums.length;i++){ if(nums[i]==nums[i-1]){ return true; } } return f原创 2020-10-03 13:04:46 · 56 阅读 · 0 评论 -
LeetCode 275 H指数||
1.二分法class Solution { public int hIndex(int[] citations) { int left=0,right=citations.length-1; while(left<=right){ int mid=(left+right)/2; if(citations[mid] == citations.length-mid){ return原创 2020-10-02 13:19:40 · 67 阅读 · 0 评论 -
LeetCode 274 H指数
1.今天这个题做出来了class Solution { public int hIndex(int[] citations) { int max=0; Arrays.sort(citations); for(int i=0;i<citations.length;i++){ if(citations[i] >= citations.length-i && citations.length-i>原创 2020-10-02 12:54:25 · 95 阅读 · 0 评论 -
LeetCode 229 求众数||
class Solution { public List<Integer> majorityElement(int[] nums) { List<Integer> list = new ArrayList<>(); if(nums.length==1){ list.add(nums[0]); return list; } int a=0,b=0,m=0.原创 2020-10-01 17:35:27 · 81 阅读 · 0 评论 -
LeetCode 169 多数元素
1.class Solution { public int majorityElement(int[] nums) { int k=1,n=nums[0]; for(int i=1;i<nums.length;i++){ if(n==nums[i]){ k++; }else{ k--; if(k<0){原创 2020-09-30 16:16:37 · 61 阅读 · 0 评论 -
LeetCode 119 杨辉三角||
class Solution { public List<Integer> getRow(int rowIndex) { int[][] arr = new int[rowIndex+1][rowIndex+1]; List<Integer> subList = new ArrayList<>(); for(int i=0;i<=rowIndex;i++){ for(int j=0;j.原创 2020-09-30 10:12:08 · 40 阅读 · 0 评论