Leedcode算法专题训练(双指针)】的更多相关文章

算法思想 双指针 167. 两数之和 II - 输入有序数组 双指针的典型用法 如果两个指针指向元素的和 sum == target,那么得到要求的结果: 如果 sum > target,移动较大的元素,使 sum 变小一些: 如果 sum < target,移动较小的元素,使 sum 变大一些. 数组中的元素最多遍历一次,时间复杂度为 O(N).只使用了两个额外变量,空间复杂度为 O(1). class Solution { public int[] twoSum(int[] numbers…
1.发现两个链表的交点 160.两个链表的交集(容易) Leetcode /力扣 public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode curA=headA; ListNode curB=headB; while(curA!=curB){ if(curA==null){ curA=headB; }else{ curA=curA.next; } i…
BFS 广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点.需要注意的是,遍历过的节点不能再次被遍历. 第一层: 0 -> {6,2,1,5} 第二层: 6 -> {4} 2 -> {} 1 -> {} 5 -> {3} 第三层: 4 -> {} 3 -> {} 每一层遍历的节点都与根节点距离相同.设 di 表示第 i 个节点与根节点的距离,推导出一个结论:对于先遍历的节点 i 与后遍历的节点 j,有 di &l…
归并排序就是一个用分治法的经典例子,这里我用它来举例描述一下上面的步骤: 1.归并排序首先把原问题拆分成2个规模更小的子问题. 2.递归地求解子问题,当子问题规模足够小时,可以一下子解决它.在这个例子中就是,当数组中的元素只有1个时,自然就有序了. 3.最后,把子问题的解(已排好序的子数组)合并成原问题的解. 当待排序的序列长度为1时,递归"开始回升",在这种情况下不要做任何工作,因为长度为1的每个序列都已排好序.归并排序算法的关键操作是"合并"步骤中两个已排序序列…
二分查找实现 非常详细的解释,简单但是细节很重要 https://www.cnblogs.com/kyoner/p/11080078.html 正常实现 Input : [1,2,3,4,5] key : 3 return the index : 2 public int binarySearch(int[] nums, int key) { int l = 0, h = nums.length - 1; while (l <= h) { int m = l + (h - l) / 2; if…
排序 快速排序 用于求解 Kth Element 问题,也就是第 K 个元素的问题. 可以使用快速排序的 partition() 进行实现.需要先打乱数组,否则最坏情况下时间复杂度为 O(N2). 堆排序 用于求解 TopK Elements 问题,也就是 K 个最小元素的问题.可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素.最小堆需要使用大顶堆来实现,大顶堆表示堆顶元素是堆中最大元素.这是因为我们要得到 k 个最小的元素,因此当遍历到一个新的元素时,需要知道这个新元素是否比堆中最…
1. 分配饼干 455. 分发饼干 题目描述:每个孩子都有一个满足度 grid,每个饼干都有一个大小 size,只有饼干的大小大于等于一个孩子的满足度,该孩子才会获得满足.求解最多可以获得满足的孩子数量. class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); int i=0,j=0; while(i<g.length && j<s.l…
https://www.cnblogs.com/findbetterme/p/10787118.html 看这个就完事了 1. 统计两个数的二进制表示有多少位不同 461. Hamming Distance (Easy) Leetcode / 力扣 Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ The above arrows point to positions where the correspo…
1. 把数组中的 0 移到末尾 283. Move Zeroes (Easy) Leetcode / 力扣 class Solution { public void moveZeroes(int[] nums) { int id=0; for(int num:nums){ if(num!=0)nums[id++]=num; } while(id<nums.length){ nums[id++]=0; } } } 跨计算节点 2. 改变矩阵维度 566. Reshape the Matrix (E…
204. 计数质数 难度简单523 统计所有小于非负整数 n 的质数的数量. class Solution { public int countPrimes(int n) { boolean[] isPrim = new boolean[n]; Arrays.fill(isPrim, true); // 从 2 开始枚举到 sqrt(n). for (int i = 2; i * i < n; i++) { // 如果当前是素数 if (isPrim[i]) { // 就把从 i*i 开始,i…