
双指针
-Billy
这个作者很懒,什么都没留下…
展开
-
移除元素
双指针:两个指针分别指向首尾,遍历头指针,遇到等于val时,遍历尾指针,找到不等于val的值,进行交换, 两指针相撞时,结束。 public int removeElement(int[] nums, int val) { int i = 0, j = nums.length-1; // 将等于val的数移动到数组右边 while (i <= j) { ...原创 2019-03-05 13:14:16 · 184 阅读 · 0 评论 -
寻找比目标字母大的最小字母
public char nextGreatestLetter(char[] letters, char target) { // 先判断最后一个字母是否比目标字母大 if (letters[letters.length-1] <= target) return letters[0]; int low = 0, high = letters.length-1...原创 2019-03-08 11:29:45 · 530 阅读 · 0 评论 -
寻找重复数
解题思路:二分法。在区间[1, n]中搜索,首先求出中点mid,然后遍历整个数组,统计所有小于等于mid的数的个 数,如果个数小于等于mid,则说明重复值在[mid+1, n]之间,反之,重复值应在[1, mid-1]之间,然后依次类推, 直到搜索完成,此时的right就是我们要求的重复值。 public int findDuplicate(int[] nums) ...原创 2019-03-04 21:05:20 · 628 阅读 · 0 评论 -
两个数组的交集
二分法: 先排序,对两个数组做归并运算,使用set来去重。 public int[] intersection(int[] nums1, int[] nums2) { int i = 0, j = 0, k = 0; // 排序 Arrays.sort(nums1); Arrays.sort(nums2); HashSet<Integer> ...原创 2019-03-04 20:41:38 · 360 阅读 · 0 评论 -
反转字符串中的元音字母
public String reverseVowels(String s) { int i = 0; int j = s.length()-1; char c; char[] ss = s.toCharArray(); while (i < j) { while (i < j && containsVowels(ss[i])...原创 2019-03-04 20:16:52 · 486 阅读 · 0 评论 -
区间列表的交集
解题思路:先要考虑两个集合存在交集的情况。通过分析,可以知道当a.s >= b.s时,交集为[a.s, min(a.e, b.e)], 同理当b.s >= a.s时,交集为[b.s, min(a.e, b.e)]。 public Interval[] intervalIntersection(Interval[] A, Interval[] B) { Arra...原创 2019-03-07 12:15:09 · 1010 阅读 · 0 评论 -
盛最多水的容器
解题思路:两个指针,一前一后,分别指向第一个元素和最后一个元素,计算此时容纳水的容量,根据两边的高度 调整移动方向,指针向高的那边移动(贪心性质)两个指针相撞时就结束。 public int maxArea(int[] height) { int i = 0; int j = height.length-1; int maxWater = 0; whil...原创 2019-03-04 16:38:40 · 188 阅读 · 0 评论 -
两数之和II
public int[] twoSum(int[] numbers, int target) { int i = 0, j = numbers.length-1; int[] ret = new int[2]; while (i < j) { while (target > 0 && numbers[j] > target) ...原创 2019-03-06 12:09:07 · 203 阅读 · 0 评论 -
删除排序数组中的重复项
public int removeDuplicates(int[] nums) { int j = 1; // 慢指针 for (int i=1; i<nums.length; i++) { if (nums[i] != nums[i-1]) { nums[j++] = nums[i]; } } return j; } ...原创 2019-03-06 11:38:18 · 157 阅读 · 0 评论 -
有序数组的平方
public int[] sortedSquares(int[] A) { int i = 0, j = A.length-1; int k = A.length-1; int[] tmp = new int[A.length]; while (i <= j) { if (A[i] * A[i] <= A[j] * A[j]) { ...原创 2019-03-06 11:12:03 · 250 阅读 · 0 评论 -
有效的完全平方数
public boolean isPerfectSquare(int num) { int i = 1, j=num; while (i <=j) { int mid = (i + j)/2; if (mid == (num * 1.0/mid)) // 防止乘法溢出 ...原创 2019-03-08 11:39:20 · 198 阅读 · 0 评论