
分治
不会的分治
水之积也不厚,则其负大舟也无力
渣硕求个大厂实习。。。
展开
-
LeetCode 241. 为运算表达式设计优先级
大佬题解class Solution { public List<Integer> diffWaysToCompute(String input) { List<Integer> res = new LinkedList<>();//这里要注意,每一个调用递归函数都会有一个【属于】本次 // 调用的res列表存放数据 // 递归函数传参传进来的是上一层左半部分或者右半部分 for(int i=0;.原创 2021-02-09 17:29:17 · 112 阅读 · 0 评论 -
LeetCode 282. 给表达式添加运算符
官方写法//解法一:官方解法class Solution { public ArrayList<String> answer; public String digits; public long target; public void recurse( int index, long previousOperand, long currentOperand, long value, ArrayList<String> ops) { Str.原创 2021-02-09 17:05:55 · 125 阅读 · 0 评论 -
LeetCode 315. 计算右侧小于当前元素的个数
//解法一:分治 用额外的index数组记录下标 根据index归并排序并计算答案 有点慢我日class Solution { int[] res; int[] tmp; int[] index; public List<Integer> countSmaller(int[] nums) { int n = nums.length; res = new int[n]; tmp = new int[n]; .原创 2021-02-08 21:40:44 · 116 阅读 · 0 评论 -
LeetCode 327. 区间和的个数
//解法一:分治 68%class Solution { public int countRangeSum(int[] nums, int lower, int upper) { int n = nums.length; long[] sum = new long[n + 1]; for(int i = 1; i <= n; i++){ sum[i] = sum[i - 1] + nums[i - 1]; .原创 2021-02-07 21:49:02 · 113 阅读 · 0 评论 -
LeetCode 493. 翻转对
//解法一:分治 真tm慢 才5%class Solution { public int reversePairs(int[] nums) { if(nums.length == 0){ return 0; } return reversePairRecursive(nums, 0, nums.length - 1); } public int reversePairRecursive(int[] nums.原创 2021-02-07 21:16:25 · 106 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
大佬题解/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node() {} public Node(int _val) { val = _val; } public Node(int _val,Node _left,Node _right) { val = .原创 2021-02-07 20:31:53 · 87 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
分治题解//解法一:分治 不是很快 60%class Solution { public int majorityElement(int[] nums) { return findMode(nums, 0, nums.length - 1); } private int findMode(int nums[], int leftIndex, int rightIndex) { if (leftIndex == rightIndex) { return nums[leftI.原创 2021-02-07 20:14:35 · 96 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
//解法一:分治最快class Solution { public int[] getLeastNumbers(int[] arr, int k) { if(k == 0 || arr.length == 0) return new int[0]; return quickSearch(arr, 0, arr.length - 1, k - 1); } private int[] quickSearch(int[] nums.原创 2021-02-07 17:18:31 · 82 阅读 · 0 评论 -
LeetCode 218. 天际线问题
大佬题解//解法一:优先队列(PriorityQueue)class Solution { public List<List<Integer>> getSkyline(int[][] buildings) { List<List<Integer>> points = new ArrayList<>(); List<List<Integer>> results = new Arr..原创 2021-02-05 20:38:33 · 209 阅读 · 0 评论 -
LeetCode 215. 数组中的第K个最大元素
大佬题解//解法一:长度为len的小顶堆,前k个直接插入,后面的元素依次和堆顶比较是否出插入,如果插入就把堆顶先拿掉class Solution { public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> q = new PriorityQueue<Integer>(k,(a, b)->a - b); for(int i = 0;i < k; .原创 2021-02-05 19:10:58 · 82 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表
官方题解解法一:优先队列(无空间优化)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; thi.原创 2021-02-05 18:32:32 · 100 阅读 · 0 评论 -
LeetCode 4. 寻找两个正序数组的中位数
//解法一://转化为找第k小的数class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int n = nums1.length; int m = nums2.length; int tol = n + m; if(tol % 2 == 1)//奇数找第 tol / 2 + 1的数 return d.原创 2021-01-30 10:41:00 · 74 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
题解//解法一:分治class Solution { public int maxSubArray(int[] nums) { return merge(nums, 0, nums.length - 1); } public int merge(int[] nums, int l, int r){ if(l == r) return nums[l]; int mid = l + r >> 1;.原创 2021-02-07 16:56:53 · 78 阅读 · 0 评论