文章

每日LeetCode 18-23

2021.3.11 ・ 共 829 字,您可能需要 2 分钟阅读

Tags: LeetCode

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
class Solution {
    public int maxSubArray(int[] nums) {
        int pre = 0;
        int maxAns = nums[0];
        for (int x : nums) {
            pre = Math.max(pre + x, x);
            maxAns = Math.max(maxAns, pre);
        }
        return maxAns;
    }
}

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--)
        {
            digits[i]++;
            digits[i] %= 10;
            if (digits[i] != 0) {
                return digits;
            }
        }

        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}

给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:

输入:s = "Hello World"
输出:5
class Solution {
    public int lengthOfLastWord(String s) {
        int ans = 0;
        char[] sChar = s.toCharArray();
        for (int i = sChar.length - 1; i >= 0; i--) {
            if (sChar[i] == ' ') {
                if (ans == 0) {
                    continue;
                }
                return ans;
            }
            ans++;
        }
        return ans;
    }
}

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2
class Solution {
    public int mySqrt(int x) {
        if (x <= 1) {
            return x;
        }
        long left = 1;
        long right = x / 2;
        while (left <= right) {
            long mid = (right + left) / 2;
            long square = mid * mid;
            if (square <= x) {
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
        }
        return (int)right;
    }
}

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

**注意:**给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶
class Solution {
    public int climbStairs(int n) {
        if (n <= 1)
            return 1;
        int[] temp = new int[n + 1];
        temp[0] = 1;
        temp[1] = 1;
        for (int i = 2; i <= n; i++) {
            temp[i] = temp[i - 2] + temp[i - 1];
        }
        return temp[n];
    }
}

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

输入: 1->1->2
输出: 1->2
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode temp = head;
        while (temp.next != null) {
            if (temp.val == temp.next.val) {
                if (temp.next.next == null)
                    temp.next = null;
                else
                    temp.next = temp.next.next;
            } else {
                temp = temp.next;
            }
        }
        return head;
    }
}