0
点赞
收藏
分享

微信扫一扫

leetcode刷题计划Day10

文章目录

70. 爬楼梯【简单】

https://leetcode-cn.com/problems/climbing-stairs/

class Solution {
    public int climbStairs(int n) {
        if (n < 3) return n;
        int[] dp = new int[n+1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

剑指 Offer 22. 链表中倒数第k个节点【简单】

https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/
快慢指针 一个指针先走k

class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode slow = head, fast = head;
        for (int i = 0; i < k; i++) {
            fast = fast.next;
        }
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}

19. 删除链表的倒数第 N 个结点【中等】

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(-1, head);
        ListNode slow = dummy, fast = dummy;
        for (int i = 0; i < n; i++) {
            fast = fast.next;
        }
        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }
        ListNode tmp = slow.next.next;
        slow.next = tmp;
        return dummy.next;
    }
}

56. 合并区间【中等】

https://leetcode-cn.com/problems/merge-intervals/

class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals.length < 2) return intervals;
        Arrays.sort(intervals, (o1,o2)->(o1[0] - o2[0]));
        List<int[]> res = new ArrayList<>();
        int start = intervals[0][0];
        int len = intervals.length;
        for (int i = 1; i < len; i++) {
            if (intervals[i][0] > intervals[i-1][1]) {
                res.add(new int[] {start, intervals[i-1][1]});
                start = intervals[i][0];
            }
            else {
                if (intervals[i][1] < intervals[i-1][1]) {
                    intervals[i][1] = intervals[i-1][1];
                }
            }
        }
        res.add(new int[]{start, intervals[len-1][1]});
        return res.toArray(new int[res.size()][2]);

    }
}

69. x 的平方根【简单】

https://leetcode-cn.com/problems/sqrtx/
二分法

思路分析

因此我们可以使用「二分查找」来查找这个整数,不断缩小范围去猜。

很容易知道,题目要我们返回的整数是有范围的,直觉上一个整数的平方根肯定不会超过它自己的一半,但是 0 和 1 除外,因此我们可以在1 到输入整数除以 2 这个范围里查找我们要找的平方根整数。0 单独判断一下就好。

class Solution {
    public int mySqrt(int x) {
        int left = 1, right = x/2;
        if (x == 0 || x == 1) return x;
        while(left < right) {
            int mid = left + (right - left + 1) / 2;
            if (x/mid == mid) {
                return mid;
            }
            else if (x/mid > mid) {
                left = mid; 
            }
            else if (x/mid < mid) {
                right = mid - 1;
            }
        }
        return left;
    }
}
举报

相关推荐

0 条评论