LeetCode自己做的题目记录2

421. 数组中两个数的最大异或值

class Solution {
    public int findMaximumXOR(int[] nums) {
        int max = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                max = Math.max(max, nums[i] ^ nums[j]);
            }
        }
        return max;
    }
}

530. 二叉搜索树的最小绝对差

class Solution {
    private List<Integer> result = new ArrayList<>();

    public int getMinimumDifference(TreeNode root) {
        int min = 999;
        setList(root);
        Collections.sort(result);
        for (int i = 1; i < result.size(); i++) {
            min = Math.min(min, result.get(i) - result.get(i - 1));
        }
        return min;
    }

    private void setList(TreeNode node) {
        if (node != null) {
            result.add(node.val);
            setList(node.left);
            setList(node.right);
        }
    }
}

788. 旋转数字

class Solution {
    public int rotatedDigits(int N) {
        List<Integer> l1 = Arrays.asList(2, 5, 6, 9);
        List<Integer> l2 = Arrays.asList(2, 5, 6, 9, 0, 1, 8);
        int count = 0;
        for (int i = 1; i <= N; i++) {
            boolean flag1 = false;
            boolean flag2 = true;
            int num = i;
            while (num != 0) {
                int r = num % 10;
                if (l1.contains(r)) {
                    flag1 = true;
                }
                if (!l2.contains(r)) {
                    flag2 = false;
                    break;
                }
                num /= 10;
            }
            if (flag1 && flag2) {
                count++;
            }
        }
        return count;
    }
}

553. 最优除法

class Solution {
    public String optimalDivision(int[] nums) {
        if (nums.length == 1) {
            return nums[0] + "";
        }
        if (nums.length == 2) {
            return nums[0] + "/" + nums[1];
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < nums.length; i++) {
            if (i == 1) {sb.append("(");}
            sb.append(nums[i]);
            if (i != nums.length - 1) {
                sb.append("/");
            } else {
                sb.append(")");
            }

        }
        return sb.toString();
    }
}

202. 快乐数

class Solution {
    public boolean isHappy(int n) {
        List<Integer> list = Arrays.asList(4, 16, 37, 58, 89, 145, 42, 20);
        n = getNum(n);
        if (n == 1) {
            return true;
        } else if (list.contains(n)) {
            return false;
        } else {
            return isHappy(n);
        }
    }

    private int getNum(int n) {
        int total = 0;
        while (n != 0) {
            int r = n % 10;
            total += r * r;
            n /= 10;
        }
        return total;
    }
}

75. 颜色分类

class Solution {
    public void sortColors(int[] nums) {
        Arrays.sort(nums);
    }
}

520. 检测大写字母

class Solution {
    public boolean detectCapitalUse(String word) {
        String w = word.toLowerCase();
        if (word.equals(word.toUpperCase()) || word.equals(w) || w.substring(1).equals(word.substring(1))) {
            return true;
        }
        return false;
    }
}

122. 买卖股票的最佳时机 II

class Solution {
    public int maxProfit(int[] prices) {
        int buy = -1;
        int total = 0;
        for (int i = 0; i < prices.length - 1; i++) {
            if (buy == -1) {
                if (prices[i] < prices[i + 1]) {
                    buy = prices[i];
                }
            } else {
                if (prices[i] > prices[i + 1]) {
                    total += prices[i] - buy;
                    buy = -1;
                }
            }
        }
        if (buy != -1) {
            total += prices[prices.length - 1] - buy;
        }
        return total;
    }
}

783. 二叉搜索树结点最小距离

class Solution {
    private List<Integer> list = new ArrayList<>();

    public int minDiffInBST(TreeNode root) {
        getMin(root);
        int min = 999;
        Collections.sort(list);
        for (int i = 1; i < list.size(); i++) {
            min = Math.min(min, list.get(i) - list.get(i - 1));
        }
        return min;
    }

    private void getMin(TreeNode node) {
        if (node != null) {
            list.add(node.val);
            getMin(node.left);
            getMin(node.right);
        }
    }
}

382. 链表随机节点

class Solution {
    private int size;
    private List<Integer> list = new ArrayList<>();
    private Random random = new Random();

    /**
     * @param head The linked list's head.
     *             Note that the head is guaranteed to be not null, so it contains at least one node.
     */
    public Solution(ListNode head) {
        getSize(head);
    }

    /**
     * Returns a random node's value.
     */
    public int getRandom() {
        return list.get(random.nextInt(size));
    }

    private void getSize(ListNode node) {
        if (node != null) {
            size++;
            list.add(node.val);
            getSize(node.next);
        }

    }
}

11. 盛最多水的容器

class Solution {
    public int maxArea(int[] height) {
        int max = 0;
        for (int i = 0; i < height.length - 1; i++) {
            for (int j = i + 1; j < height.length; j++) {
                max = Math.max(max, Math.min(height[i], height[j]) * (j - i));
            }
        }
        return max;
    }
}

36. 有效的数独

class Solution {
    private List<Character> list = new ArrayList<>();

    public boolean isValidSudoku(char[][] board) {
        return checkColumn(board) && checkRow(board) && checkBlock(board);
    }

    private boolean checkColumn(char[][] board) {
        for (int i = 0; i < board.length; i++) {
            list.clear();
            for (char[] b : board) {
                char val = b[i];
                if (val != '.' && list.contains(val)) {
                    return false;
                }
                list.add(val);
            }
        }
        return true;
    }

    private boolean checkRow(char[][] board) {
        for (char[] b : board) {
            list.clear();
            for (char c : b) {
                if (c != '.' && list.contains(c)) {
                    return false;
                }
                list.add(c);
            }
        }
        return true;
    }

    private boolean checkBlock(char[][] board) {
        List<Character> l1 = new ArrayList<>();
        List<Character> l2 = new ArrayList<>();
        List<Character> l3 = new ArrayList<>();
        for (int i = 0; i < board.length; i++) {
            if (i % 3 == 0) {
                l1.clear();
                l2.clear();
                l3.clear();
            }
            for (int j = 0; j < board.length; j++) {
                int flag = j / 3;
                char val = board[i][j];
                if (val == '.') {
                    continue;
                }
                if (flag == 0) {
                    if (l1.contains(val)) {
                        return false;
                    }
                    l1.add(val);
                }
                if (flag == 1) {
                    if (l2.contains(val)) {
                        return false;
                    }
                    l2.add(val);
                }
                if (flag == 2) {
                    if (l3.contains(val)) {
                        return false;
                    }
                    l3.add(val);
                }
            }
        }
        return true;
    }
}

113. 路径总和 II

class Solution {
    private List<Integer> temp = new ArrayList<>();
    private List<List<Integer>> result = new ArrayList<>();

    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        getResult(root, 0, sum);
        return result;
    }

    private void getResult(TreeNode node, int level, int sum) {
        if (node != null) {
            temp.add(level, node.val);
            if (node.left == null && node.right == null) {
                int s = 0;
                for (int i = 0; i <= level; i++) {
                    s += temp.get(i);
                }
                //System.out.println(s);
                if (s == sum) {
                    List<Integer> t = new ArrayList<>();
                    for (int i = 0; i <= level; i++) {
                        t.add(temp.get(i));
                    }
                    result.add(t);
                }
            }
            level++;
            getResult(node.left, level, sum);
            getResult(node.right, level, sum);
        }
    }
}

100. 相同的树

class Solution {
    private List<Integer> l1 = new ArrayList<>();
    private List<Integer> l2 = new ArrayList<>();

    public boolean isSameTree(TreeNode p, TreeNode q) {
        setList(p, l1);
        setList(q, l2);
        if (l1.size() != l2.size()) {
            return false;
        }
        for (int i = 0; i < l1.size(); i++) {
            if (!l1.get(i).equals(l2.get(i))) {
                return false;
            }
        }
        return true;
    }

    private void setList(TreeNode node, List<Integer> l) {
        if (node != null) {
            l.add(node.val);
            if (node.left == null && node.right != null) {
                l.add(-1);
            }
            setList(node.left, l);
            setList(node.right, l);
        }
    }
}

976. 三角形的最大周长

class Solution {
    public int largestPerimeter(int[] A) {
        int total = 0;
        Arrays.sort(A);
        for (int i = 0; i < A.length - 2; i++) {
            if (A[i] + A[i + 1] > A[i + 2]) {
                total = Math.max(total, A[i] + A[i + 1] + A[i + 2]);
            }
        }
        return total;
    }
}

961. 重复 N 次的元素

class Solution {
    public int repeatedNTimes(int[] A) {
        List<Integer> l = new ArrayList<>();
        for (int i = 0; i < A.length; i++) {
            if (l.contains(A[i])) {
                return A[i];
            }
            l.add(A[i]);
        }
        return -1;
    }
}

965. 单值二叉树

class Solution {
    private Set<Integer> s = new HashSet<>();

    public boolean isUnivalTree(TreeNode root) {
        setSet(root);
        return s.size() == 1;
    }

    private void setSet(TreeNode node) {
        if (node != null) {
            s.add(node.val);
            setSet(node.left);
            setSet(node.right);
        }
    }
}

973. 最接近原点的 K 个点

class Solution {
    public int[][] kClosest(int[][] points, int K) {
        List<Integer> l1 = new ArrayList<>();
        List<Integer> l2 = new ArrayList<>();
        int[][] result = new int[K][2];
        for (int i = 0; i < points.length; i++) {
            l1.add(points[i][0] * points[i][0] + points[i][1] * points[i][1]);
            l2.add(l1.get(i));
        }
        Collections.sort(l1);
        for (int i = 0; i < K; i++) {
            int flag = l2.indexOf(l1.get(i));
            result[i] = points[flag];
        }
        return result;
    }
}

509. 斐波那契数

class Solution {
    public int fib(int N) {
        if (N == 0) {
            return 0;
        }
        if (N == 1) {
            return 1;
        }
        int total = 0;
        int pre1 = 1;
        int pre2 = 0;
        for (int i = 2; i <= N; i++) {
            total = pre1 + pre2;
            pre2 = pre1;
            pre1 = total;
        }

        return total;
    }
}

538. 把二叉搜索树转换为累加树

class Solution {
    private List<Integer> list = new ArrayList<>();

    public TreeNode convertBST(TreeNode root) {
        setList(root);
        setNode(root);
        return root;
    }

    private void setList(TreeNode node) {
        if (node != null) {
            list.add(node.val);
            setList(node.left);
            setList(node.right);
        }
    }

    private void setNode(TreeNode node) {
        if (node != null) {
            node.val = list.stream().filter(x -> x >= node.val).mapToInt(x -> x).sum();
            setNode(node.left);
            setNode(node.right);
        }
    }
}

303. 区域和检索 - 数组不可变

class NumArray {
    private int[] nums;

    public NumArray(int[] nums) {
        this.nums = nums;
    }

    public int sumRange(int i, int j) {
        int total = 0;
        for (; i <= j; i++) {
            total += nums[i];
        }
        return total;
    }
}

242. 有效的字母异位词

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] c1 = s.toCharArray();
        char[] c2 = t.toCharArray();
        Arrays.sort(c1);
        Arrays.sort(c2);
        return Arrays.toString(c1).equals(Arrays.toString(c2));
    }
}

653. 两数之和 IV - 输入 BST

class Solution {
    private List<Integer> list = new ArrayList<>();

    public boolean findTarget(TreeNode root, int k) {
        setList(root);
        for (int i = 0; i < list.size(); i++) {
            for (int j = i + 1; j < list.size(); j++) {
                if (list.get(i) + list.get(j) == k) {
                    return true;
                }
            }
        }
        return false;
    }

    private void setList(TreeNode node) {
        if (node != null) {
            list.add(node.val);
            setList(node.left);
            setList(node.right);
        }
    }
}

931. 下降路径最小和

class Solution {
    public int minFallingPathSum(int[][] A) {
        int l1 = A.length - 1;
        int l2 = A[0].length - 1;

        for (int i = 0; i < l1; i++) {
            if (l2 > 0) {
                for (int j = 0; j <= l2; j++) {
                    if (j == 0) {
                        A[i + 1][j] = A[i + 1][j] + Math.min(A[i][j], A[i][j + 1]);
                    } else if (j == l2) {
                        A[i + 1][j] = A[i + 1][j] + Math.min(A[i][j], A[i][j - 1]);
                    } else {
                        A[i + 1][j] = A[i + 1][j] + Math.min(A[i][j], Math.min(A[i][j - 1], A[i][j + 1]));
                    }
                }
            }
        }
        Arrays.sort(A[l1]);
        return A[l1][0];
    }
}

462. 最少移动次数使数组元素相等 II

class Solution {
    public int minMoves2(int[] nums) {
        if (nums.length < 2) {
            return 0;
        }
        if (nums.length == 2) {
            return Math.abs(nums[0] - nums[1]);
        }
        Arrays.sort(nums);
        int mid = nums.length / 2;
        long t1 = 0, t2 = 0;
        for (int i = 0; i < nums.length; i++) {
            t1 += Math.abs(nums[i] - nums[mid]);
            t2 += Math.abs(nums[i] - nums[mid + 1]);
        }
        return (int)Math.min(t1, t2);
    }
}

343. 整数拆分

class Solution {
    public int integerBreak(int n) {
        //你可以假设 n 不小于 2 且不大于 58。
        //主要是找规律
        // 1  2  3  4  5  6  7  8  9  10
        // 1  1  2  4  6  9  12 16 27 36
        int[] DP = new int[n + 1];
        DP[0] = 0;
        DP[1] = 1;
        for (int i = 2; i <= n; i++) {
            DP[i] = 0;
            for (int j = 1; j < i; j++) {
                DP[i] = Math.max(DP[i], Math.max(j, DP[j]) * Math.max(i - j, DP[i - j]));
            }
        }
        return DP[n];
    }
}

386. 字典序排数

class Solution {
    public List<Integer> lexicalOrder(int n) {
        List<Integer> list = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }
        return list.stream().sorted(Comparator.comparing(x -> (x + ""))).collect(Collectors.toList());
    }
}

398. 随机数索引

class Solution {
    private Map<Integer, List<Integer>> map;

    public Solution(int[] nums) {
        map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int key = nums[i];
            if (map.containsKey(key)) {
                map.get(key).add(i);
            } else {
                List<Integer> l = new ArrayList<>();
                l.add(i);
                map.put(key, l);
            }
        }
    }

    public int pick(int target) {
        List<Integer> list = map.get(target);
        return list.get((int)(Math.random() * list.size()));
    }
}

178. 分数排名

SELECT Score,(SELECT count(distinct(Score)) + 1 FROM Scores s WHERE s.Score > sc.Score) Rank FROM Scores sc order by Score desc

453. 最小移动次数使数组元素相等

class Solution {
    public int minMoves(int[] nums) {
        int total = 0;
        for (int num : nums) {
            total += num;
        }
        Arrays.sort(nums);
        return total - nums[0] * nums.length;
    }
}

860. 柠檬水找零

class Solution {
    private int[] money = {0, 0};

    public boolean lemonadeChange(int[] bills) {
        for (int bill : bills) {
            if (bill == 5) {
                money[0]++;
            }
            if (bill == 10) {
                if (money[0] < 1) {
                    return false;
                }
                money[0]--;
                money[1]++;
            }
            if (bill == 20) {
                if (money[0] > 2 || (money[1] > 0 && money[0] > 0)) {
                    if (money[1] > 0) {
                        money[1]--;
                        money[0]--;
                    } else {
                        money[0] -= 3;
                    }
                } else {
                    return false;
                }
            }
        }
        return true;
    }
}

897. 递增顺序查找树

class Solution {
    private List<Integer> list = new ArrayList<>();

    public TreeNode increasingBST(TreeNode root) {
        setList(root);
        TreeNode r = new TreeNode(list.get(0));
        getNode(r, 1);
        return r;
    }

    private void setList(TreeNode node) {
        if (node != null) {
            setList(node.left);
            list.add(node.val);
            setList(node.right);
        }
    }

    private TreeNode getNode(TreeNode node, int index) {
        if (index < list.size()) {
            node.right = new TreeNode(list.get(index));
            getNode(node.right, index += 1);
        }
        return node;
    }
}

99. 恢复二叉搜索树

class Solution {
    private List<Integer> list = new ArrayList<>();
    private int index = 0;

    public void recoverTree(TreeNode root) {
        setList(root);
        Collections.sort(list);
        setNode(root);
    }

    private void setList(TreeNode node) {
        if (node != null) {
            list.add(node.val);
            setList(node.left);
            setList(node.right);
        }
    }

    private void setNode(TreeNode node) {
        if (node != null) {
            setNode(node.left);
            node.val = list.get(index++);
            setNode(node.right);
        }
    }
}

404. 左叶子之和

class Solution {
    private int total;

    public int sumOfLeftLeaves(TreeNode root) {
        setTotal(root, false);
        return total;
    }

    private void setTotal(TreeNode node, boolean flag) {
        if (node != null) {
            if (flag && node.left == null && node.right == null) {
                total += node.val;
            }
            setTotal(node.left, true);
            setTotal(node.right, false);
        }
    }
}

690. 员工的重要性

class Solution {
    private int total;
    private List<Employee> employees;

    public int getImportance(List<Employee> employees, int id) {
        this.employees = employees;
        Employee employee = employees.stream().filter(e -> e.id == id).findFirst().orElse(null);
        total += employee.importance;
        getTotal(employee.subordinates);
        return total;
    }

    public void getTotal(List<Integer> ids) {
        for (Employee employee : employees) {
            if (ids.contains(employee.id)) {
                total += employee.importance;
                if (employee.subordinates != null && employee.subordinates.size() != 0) {
                    getTotal(employee.subordinates);
                }
            }

        }

    }
}

121. 买卖股票的最佳时机

class Solution {
    public int maxProfit(int[] prices) {
        int max = 0;
        for (int i = 0; i < prices.length; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                max = Math.max(max, prices[j] - prices[i]);
            }
        }
        return max;
    }
}

495. 提莫攻击

class Solution {
   public int findPoisonedDuration(int[] timeSeries, int duration) {
        if (timeSeries.length == 1) {
            return duration;
        }
        int total = 0;
        for (int i = 1; i < timeSeries.length; i++) {
            if (i == 1) { total += duration; }
            if (timeSeries[i] - timeSeries[i - 1] < duration) {
                total += timeSeries[i] - timeSeries[i - 1];
            } else {
                total += duration;
            }
        }
        return total;
    }
}

228. 汇总区间

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> result = new ArrayList<>();
        if (nums.length < 1) {
            return result;
        }
        int start = -1;
        for (int i = 0; i < nums.length - 1; i++) {
            int val = nums[i + 1] - nums[i];
            if (val == 1 && start == -1) {
                start = nums[i];
            }
            if (val != 1 && start == -1) {
                result.add(nums[i] + "");
            }
            if (val != 1 && start != -1) {
                result.add(start + "->" + nums[i]);
                start = -1;
            }
        }
        if (start != -1) {
            result.add(start + "->" + nums[nums.length - 1]);
        } else {
            result.add(nums[nums.length - 1] + "");
        }
        return result;
    }
}

268. 缺失数字

class Solution {
    public int missingNumber(int[] nums) {
        int t = 0;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            t = t + i;
            sum += nums[i];
        }
        return t + nums.length - sum;
    }
}

17. 电话号码的字母组合

class Solution {
    private List<List<String>> l = Arrays.asList(Arrays.asList("a", "b", "c"), Arrays.asList("d", "e", "f"),
        Arrays.asList("g", "h", "i"), Arrays.asList("j", "k", "l"), Arrays.asList("m", "n", "o"),
        Arrays.asList("p", "q", "r", "s"), Arrays.asList("t", "u", "v"), Arrays.asList("w", "x", "y", "z"));
    private List<String> result = new ArrayList<>();

    public List<String> letterCombinations(String digits) {
        if (digits.length() == 0) {
            return result;
        }
        int i = Integer.parseInt(digits.charAt(0) + "");

        if (result.size() != 0) {
            List<String> temp = new ArrayList<>();
            for (String s1 : result) {
                for (String s2 : l.get(i - 2)) {
                    temp.add(s1 + s2);
                }
            }
            result = temp;
        } else {
            result.addAll(l.get(i - 2));
        }
        if (digits.length() > 1) {
            letterCombinations(digits.substring(1));
        }
        return result;
    }
}

506. 相对名次

class Solution {
    public String[] findRelativeRanks(int[] nums) {
        String[] result = new String[nums.length];
        int[] temp = new int[nums.length];
        System.arraycopy(nums, 0, temp, 0, nums.length);
        Arrays.sort(temp);
        for (int i = temp.length - 1; i >= 0; i--) {
            for (int j = 0; j < nums.length; j++) {
                if (temp[i] == nums[j]) {
                    if (temp.length - i == 1) {
                        result[j] = "Gold Medal";
                    } else if (temp.length - i == 2) {
                        result[j] = "Silver Medal";
                    } else if (temp.length - i == 3) {
                        result[j] = "Bronze Medal";
                    } else {
                        result[j] = (temp.length - i) + "";
                    }
                    break;
                }
            }
        }
        return result;
    }
}

196. 删除重复的电子邮箱

delete p1 from Person p1 ,Person p2
where p1.Email = p2.Email and p1.Id > p2.Id

164. 最大间距

class Solution {
    public int maximumGap(int[] nums) {
        if (nums.length < 2) { return 0; }
        int max = 0;
        Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            max = Math.max(max, nums[i] - nums[i - 1]);
        }
        return max;
    }
}

80. 删除排序数组中的重复项 II

class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int index = 0;
        int count = 1;
        int num = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == num) {
                if (count < 2) {
                    index++;
                    count++;
                }
            } else {
                index++;
                count = 1;
                num = nums[i];
            }
            nums[index] = nums[i];
        }
        return index + 1;
    }
}

896. 单调数列

class Solution {
    public boolean isMonotonic(int[] A) {
        if (A.length < 2) {return true;}
        Boolean flag = null;
        for (int i = 1; i < A.length; i++) {
            int val = A[i] - A[i - 1];
            if (val != 0 && flag == null) {
                flag = val > 0;
            }
            if (flag != null) {
                if (flag && val < 0) {
                    return false;
                }
                if (!flag && val > 0) {
                    return false;
                }
            }
        }
        return true;
    }
}

454. 四数相加 II

class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        /**
        用一个 map 保存 A 和 B 中出现的两数和及次数, 遍历 C 和 D 的两数和
        在 map 内搜索对应的负数出现的次数
        **/
        Map<Integer, Integer> map = new HashMap<>();
        int n = A.length;
        int ret = 0;
        // 统计 A 和 B 中出现的两数和及次数
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < n; ++j) {
                int sum = A[i] + B[j];
                map.put(sum, map.getOrDefault(sum, 0) + 1);
            }
        }
        // 遍历 C 和 D 的两数和搜索对应的负数出现的次数
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < n; ++j) {
                int sum = C[i] + D[j];
                ret += map.getOrDefault(-sum, 0);
            }
        }
        
        return ret;
    }
}

307. 区域和检索 - 数组可修改

class NumArray {
    private int[] nums;

    public NumArray(int[] nums) {
        this.nums = nums;
    }

    public void update(int i, int val) {
        nums[i] = val;
    }

    public int sumRange(int i, int j) {
        int total = 0;
        for (; i <= j; i++) {
            total += nums[i];
        }
        return total;
    }
}

551. 学生出勤记录 I

class Solution {
    public boolean checkRecord(String s) {
        return !((s.indexOf("A") != s.lastIndexOf("A")) || s.contains("LLL"));
    }
}

598. 范围求和 II

class Solution {
    public int maxCount(int m, int n, int[][] ops) {
        for (int[] op : ops) {
            if (op[0] < m) {
                m = op[0];
            }
            if (op[1] < n) {
                n = op[1];
            }
        }
        return m * n;
    }
}

455. 分发饼干

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(s);
        int total = 0;
        List<Integer> index = new ArrayList<>();
        for (int i : g) {
            for (int j = 0; j < s.length; j++) {
                if (index.contains(j)) {
                    continue;
                }
                if (s[j] >= i) {
                    total++;
                    index.add(j);
                    break;
                }
            }
        }
        return total;
    }
}

345. 反转字符串中的元音字母

class Solution {
    private String str = "aeiouAEIOU";

    public String reverseVowels(String s) {
        char[] c = s.toCharArray();
        int start = 0, end = c.length - 1;
        boolean flag1 = false, flag2 = false;
        while (start <= end) {
            if (str.contains(c[start] + "")) {
                flag1 = true;
            } else {
                start++;
            }
            if (str.contains(c[end] + "")) {
                flag2 = true;
            } else {
                end--;
            }
            if (flag1 && flag2) {
                flag1 = false;
                flag2 = false;
                char temp = c[start];
                c[start] = c[end];
                c[end] = temp;
                start++;
                end--;
            }
        }
        return new String(c);
    }
}

67. 二进制求和

class Solution {
    public String addBinary(String a, String b) {
        //return new BigInteger(a, 2).add(new BigInteger(b, 2)).toString(2);
        StringBuilder sb = new StringBuilder();
        char[] c1 = a.toCharArray();
        char[] c2 = b.toCharArray();
        int l1 = c1.length - 1;
        int l2 = c2.length - 1;
        boolean flag = false;
        int max = Math.max(c1.length, c2.length);
        for (int i = 0; i < max; i++) {
            int n1 = l1 >= 0 ? Integer.parseInt(c1[l1--] + "") : 0;
            int n2 = l2 >= 0 ? Integer.parseInt(c2[l2--] + "") : 0;
            int n = n1 + n2;
            if (flag) {
                n++;
            }
            if (n == 0) {
                flag = false;
                sb.insert(0, 0);
            }
            if (n == 1) {
                flag = false;
                sb.insert(0, 1);
            }
            if (n == 2) {
                flag = true;
                sb.insert(0, 0);
            }
            if (n == 3) {
                flag = true;
                sb.insert(0, 1);
            }
        }
        if (flag) {
            sb.insert(0, 1);
        }
        return sb.toString();
    }
}

646. 最长数对链

class Solution {
    public int findLongestChain(int[][] pairs) {
        int total = 1;
        Arrays.sort(pairs, Comparator.comparingInt(x -> x[1]));
        int s = pairs[0][1];
        for (int i = 1; i < pairs.length; i++) {
            if (s < pairs[i][0]) {
                total += 1;
                s = pairs[i][1];
            }
        }
        return total;
    }
}

409. 最长回文串

class Solution {
    public int longestPalindrome(String s) {
        int total = 0;
        final Boolean[] flag = {false};
        Map<Character, Integer> map = new HashMap<>(s.length());
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        total += map.values().stream().mapToInt(v -> {
            if (v % 2 == 0) {
                return v;
            } else {
                flag[0] = true;
                return v - 1;
            }
        }).sum();
        if (flag[0]) {
            total++;
        }
        return total;
    }
}

671. 二叉树中第二小的节点

class Solution {
    private List<Integer> list = new ArrayList<>();

    public int findSecondMinimumValue(TreeNode root) {
        setList(root);
        Collections.sort(list);
        int min = list.get(0);
        for (Integer i : list) {
            if (i > min) {
                return i;
            }
        }
        return -1;
    }

    private void setList(TreeNode node) {
        if (node != null) {
            list.add(node.val);
            setList(node.left);
            setList(node.right);
        }
    }
}

844. 比较含退格的字符串

class Solution {
    public boolean backspaceCompare(String S, String T) {
        String s1 = getString(S);
        String s2 = getString(T);
        return s1.equals(s2);
    }

    private String getString(String s) {
        int i = s.indexOf("#");
        if (i == 0) {
            return getString(s.substring(1));
        }
        if (i > 0) {
            return getString(s.substring(0, i - 1) + s.substring(i + 1));
        }
        return s;
    }
}

191. 位1的个数

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        return Integer.toBinaryString(n).replace("0", "").length();
    }
}

445. 两数相加 II

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        setNum(l1, list1);
        setNum(l2, list2);
        Collections.reverse(list1);
        Collections.reverse(list2);
        char[] chars = getResultChars(list1, list2);
        ListNode l = new ListNode(Integer.parseInt(chars[0] + ""));
        setNode(l, 1, chars);
        return l;
    }

    private char[] getResultChars(List<Integer> l1, List<Integer> l2) {
        StringBuilder sb = new StringBuilder();
        boolean flag = false;
        int max = Math.max(l1.size(), l2.size());
        for (int i = 0; i < max; i++) {
            int r1 = l1.size() > i ? l1.get(i) : 0;
            int r2 = l2.size() > i ? l2.get(i) : 0;
            int r = r1 + r2;
            if (flag) {
                r++;
                flag = false;
            }
            if (r > 9) {
                flag = true;
                r -= 10;
            }
            sb.append(r);
        }
        if (flag) {
            sb.append(1);
        }
        return sb.reverse().toString().toCharArray();
    }

    private void setNum(ListNode l, List<Integer> list) {
        if (l != null) {
            list.add(l.val);
            setNum(l.next, list);
        }

    }

    private void setNode(ListNode l, int index, char[] chars) {
        if (index < chars.length) {
            l.next = new ListNode(Integer.parseInt(chars[index] + ""));
            setNode(l.next, index += 1, chars);
        }
    }
}

217. 存在重复元素

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        return !(set.size() == nums.length);
    }
}

167. 两数之和 II - 输入有序数组

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        for (int i = 0; i < numbers.length; i++) {
            for (int j = i + 1; j < numbers.length; j++) {
                if (numbers[i] + numbers[j] == target) {
                    return new int[] {i + 1, j + 1};
                }
            }
        }
        return null;
    }
}

448. 找到所有数组中消失的数字

class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        Set<Integer> s1 = new HashSet<>();
        Set<Integer> s2 = new HashSet<>();
        for (int i = 1; i <= nums.length; i++) {
            s1.add(i);
            s2.add(nums[i - 1]);
        }
        s1.removeAll(s2);
        return new ArrayList<>(s1);
    }
}

888. 公平的糖果交换

class Solution {
    public int[] fairCandySwap(int[] A, int[] B) {
        int totalA = 0, totalB = 0;
        for (int i : A) {
            totalA += i;
        }
        for (int i : B) {
            totalB += i;
        }
        int diff = (totalA - totalB) / 2;
        for (int i : A) {
            for (int j : B) {
                if (i == j + diff) {
                    return new int[] {i, j};
                }
            }
        }
        return null;
    }
}

392. 判断子序列

class Solution {
    public boolean isSubsequence(String s, String t) {
        if (s == null || s.equals("")) {
            return true;
        }
        char[] c1 = s.toCharArray();
        int index = 0;
        for (char c : t.toCharArray()) {
            if (c == c1[index]) {
                index++;
            }
            if (index == c1.length) {
                return true;
            }
        }
        return false;
    }
}

383. 赎金信

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        Map<Character, Integer> map = new HashMap<>(magazine.length());
        for (char c : magazine.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        for (char c : ransomNote.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) - 1);
        }
        return map.values().stream().filter(x -> x < 0).count() <= 0;
    }
}

796. 旋转字符串

class Solution {
    public boolean rotateString(String A, String B) {
        if (A.length() < 2) {
            return A.equals(B);
        }
        for (int i = 0; i < B.length() - 1; i++) {
            A = A.substring(1) + A.charAt(0);
            if (A.equals(B)) {
                return true;
            }
        }
        return false;
    }
}

263. 丑数

class Solution {
    public boolean isUgly(int num) {
        if (num <= 0) {
            return false;
        }
        while (num % 2 == 0) {
            num >>= 1;
        }

        while (num % 3 == 0) {
            num /= 3;
        }

        while (num % 5 == 0) {
            num /= 5;
        }
        return num == 1;
    }
}

112. 路径总和

class Solution {
    private List<Integer> list = new ArrayList<>();
    private boolean flag = false;

    public boolean hasPathSum(TreeNode root, int sum) {
        setList(root, sum, 0);
        return flag;
    }

    private void setList(TreeNode node, int sum, int index) {
        if (node != null) {
            list.add(index, node.val);
            index++;
            if (node.left == null && node.right == null) {
                int t = 0;
                for (int i = 0; i < index; i++) {
                    t += list.get(i);
                }
                if (t == sum) {
                    flag = true;
                }
            }
            setList(node.left, sum, index);
            setList(node.right, sum, index);
        }
    }
}

342. 4的幂

class Solution {
    public boolean isPowerOfFour(int num) {
        if (num <= 0) {
            return false;
        }
        while (num % 4 == 0) {
            num >>= 2;
        }
        return num == 1;
    }
}

611. 有效三角形的个数

class Solution {
    public int triangleNumber(int[] nums) {
        int total = 0;
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                for (int k = j + 1; k < nums.length; k++) {
                    if (nums[i] + nums[j] > nums[k]) {
                        total++;
                    } else {
                        break;
                    }
                }
            }
        }
        return total;
    }
}

134. 加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int length = gas.length;
        for (int i = 0; i < length; i++) {
            if (gas[i] >= cost[i]) {
                int index = i;
                int total = 0;
                for (int j = 0; j < length; j++) {
                    if (index >= length) {
                        index = 0;
                    }
                    total += gas[index] - cost[index];
                    if (total < 0) {
                        break;
                    }
                    index++;
                }
                if (total >= 0) {
                    return i;
                }
            }
        }
        return -1;
    }
}

231. 2的幂

class Solution {
    public boolean isPowerOfTwo(int n) {
        if (n <= 0) {
            return false;
        }
        while (n % 2 == 0) {
            n >>= 1;
        }
        return n == 1;
    }
}

405. 数字转换为十六进制数

class Solution {
    public String toHex(int num) {
        return Integer.toHexString(num);
    }
}

541. 反转字符串 II

class Solution {
    private StringBuilder sb = new StringBuilder();

    public String reverseStr(String s, int k) {
        if (s.length() <= k) {
            sb.append(new StringBuilder(s).reverse());
        } else if (s.length() <= 2 * k) {
            sb.append(new StringBuilder(s.substring(0, k)).reverse());
            sb.append(s.substring(k));
        } else {
            sb.append(new StringBuilder(s.substring(0, k)).reverse());
            sb.append(s, k, 2 * k);
            s = s.substring(2 * k);
            reverseStr(s, k);
        }
        return sb.toString();
    }
}

70. 爬楼梯

class Solution {
   public int climbStairs(int n) {
        if (n <= 3) {
            return n;
        } else {
            return climbStairs(n - 1) + climbStairs(n - 2);
        }
    }
}

其实就是斐波那契数列
83. 删除排序链表中的重复元素

class Solution {
    private List<Integer> list = new ArrayList<>();

    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return null;
        }
        getList(head);
        ListNode l = new ListNode(list.get(0));
        setList(l, 1);
        return l;
    }

    private void setList(ListNode node, int index) {
        if (index < list.size()) {
            node.next = new ListNode(list.get(index));
            setList(node.next, index += 1);
        }
    }

    private void getList(ListNode node) {
        if (node != null) {
            if (!list.contains(node.val)) {
                list.add(node.val);
            }
            getList(node.next);
        }
    }
}

599. 两个列表的最小索引总和

class Solution {
    public String[] findRestaurant(String[] list1, String[] list2) {
        Map<String, Integer> map = new HashMap<>();

        for (int i = 0; i < list1.length; i++) {
            for (int j = 0; j < list2.length; j++) {
                if (list1[i].equals(list2[j])) {
                    map.put(list1[i], i + j);
                }
            }
        }

        Integer i = map.values().stream().sorted().findFirst().get();
        List<String> collect = map.entrySet().stream().filter(e -> e.getValue().equals(i))
                .map(e -> e.getKey()).collect(Collectors.toList());
        String[] strs = new String[collect.size()];
        collect.toArray(strs);
        return strs;
    }
}

492. 构造矩形

class Solution {
    public int[] constructRectangle(int area) {
        int n = (int)Math.sqrt(area);
        while(area % n > 0 && n-- > 0);
        return new int[]{area/n,n};
    }
}
第一个能取模为0的是最大的

223. 矩形面积

class Solution {
    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int total = (C - A) * (D - B) + (G - E) * (H - F);
        int subTotal;
        //不相交的情况
        if (B >= H || F >= D || E >= C || A >= G) {
            subTotal = 0;
        } else {
            subTotal = (Math.min(C, G) - Math.max(E, A)) * (Math.min(D, H) - Math.max(B, F));
        }
        return total - subTotal;
    }
}

543. 二叉树的直径

class Solution {
    private int max;

    public int diameterOfBinaryTree(TreeNode root) {
        getMax(root);
        return max;
    }

    private int getMax(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int leftVal = getMax(node.left);
        int rightVal = getMax(node.right);
        if (max < leftVal + rightVal) {
            max = leftVal + rightVal;
        }
        return Math.max(leftVal, rightVal) + 1;
    }
}

23. 合并K个排序链表

class Solution {
    private List<Integer> list = new ArrayList<>();

    public ListNode mergeKLists(ListNode[] lists) {
        if (lists.length < 1) {
            return null;
        }
        for (ListNode listNode : lists) {
            setList(listNode);
        }
        if (list.size() == 0) {
            return null;
        }
        Collections.sort(list);
        ListNode root = new ListNode(list.get(0));
        setNode(root, 1);
        return root;
    }

    private void setNode(ListNode root, int index) {
        if (index < list.size()) {
            root.next = new ListNode(list.get(index));
            setNode(root.next, index += 1);
        }
    }

    private void setList(ListNode node) {
        if (node != null) {
            list.add(node.val);
            setList(node.next);
        }
    }
}

917. 仅仅反转字母

class Solution {
    public String reverseOnlyLetters(String S) {
        char[] cs = S.toCharArray();
        int l = S.length() - 1;
        int index = 0;
        while (l >= index) {
            char c1 = cs[index];
            char c2 = cs[l];
            if (!((c1 > 64 && c1 < 91) || (c1 > 96 && c1 < 123))) {
                index++;
                continue;
            }
            if (!((c2 > 64 && c2 < 91) || (c2 > 96 && c2 < 123))) {
                l--;
                continue;
            }
            if (c1 == c2) {
                index++;
                l--;
                continue;
            }
            cs[index] = c2;
            cs[l] = c1;
            index++;
            l--;
        }
        return new String(cs);
    }
}

415. 字符串相加

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        char[] chars1 = num1.toCharArray();
        char[] chars2 = num2.toCharArray();
        int l1 = num1.length() - 1;
        int l2 = num2.length() - 1;
        boolean flag = false;
        for (; Math.max(l1, l2) >= 0; l1--, l2--) {
            int i1, i2;
            if (l1 < 0) {
                i1 = 0;
            } else {
                i1 = Integer.parseInt(chars1[l1] + "");
            }
            if (l2 < 0) {
                i2 = 0;
            } else {
                i2 = Integer.parseInt(chars2[l2] + "");
            }
            int total = i1 + i2;
            if (flag) {
                total++;
                flag = false;
            }
            if (total > 9) {
                total -= 10;
                flag = true;
            }
            sb.insert(0, total);
        }
        if (flag) {
            sb.insert(0, 1);
        }
        return sb.toString();
    }
}

205. 同构字符串

class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character, Character> sMap = new HashMap<>();
        Map<Character, Character> tMap = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char sE = s.charAt(i);
            char tE = t.charAt(i);
            Character sVal = sMap.get(sE);
            if (sVal == null) {
                if (tMap.containsKey(tE)) {
                    return false;
                }
                sMap.put(sE, tE);
                tMap.put(tE, sE);
                continue;
            }
            if (sVal != tE) {
                return false;
            }
        }
        return true;
    }
}

35. 搜索插入位置

class Solution {
    public int searchInsert(int[] nums, int target) {
        if (target <= nums[0]) {
            return 0;
        }
        if (target > nums[nums.length - 1]) {
            return nums.length;
        }
        for (int i = 1; i < nums.length; i++) {
            if (target == nums[i]) {
                return i;
            }
            if (target > nums[i - 1] && target < nums[i]) {
                return i;
            }
        }
        return -1;
    }
}

26. 删除排序数组中的重复项

class Solution {
    public int removeDuplicates(int[] nums) {
        int index = nums.length - 1;
        for (int i = 0; i < index; i++) {
            if (nums[i] == nums[i + 1]) {
                for (int j = i + 1; j < index; j++) {
                    nums[j] = nums[j + 1];
                }
                i--;
                index--;
            }
        }
        return index + 1;
    }
}

326. 3的幂

class Solution {
    public boolean isPowerOfThree(int n) {
        return n > 0 && 1162261467 % n == 0;
    }
}

88. 合并两个有序数组

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = m; i < m + n; i++) {
            nums1[i] = nums2[i - m];
        }
        Arrays.sort(nums1);
    }
}

357. 计算各个位数不同的数字个数

class Solution {
    public int countNumbersWithUniqueDigits(int n) {
        int count = 0;
        for (int i = 0; i < (int) Math.pow(10, n); i++) {
            if (isRepeat(i)) {
                count++;
            }
        }
        return count;
    }

    private boolean isRepeat(int n) {
        if (n < 11) {
            return true;
        }
        String s = n + "";
        for (char c : s.toCharArray()) {
            if (s.indexOf(c) != s.lastIndexOf(c)) {
                return false;
            }
        }
        return true;
    }
}

53. 最大子序和

class Solution {
    public int maxSubArray(int[] nums) {
        int total = nums[0];
        int sum = 0;
        for (int num : nums) {
            if (sum > 0) {
                sum += num;
            } else {
                sum = num;
            }
            total = Math.max(total, sum);
        }
        return total;
    }
}

504. 七进制数

class Solution {
    public String convertToBase7(int num) {
        return Integer.toString(num, 7);
    }
}

628. 三个数的最大乘积

class Solution {
    public int maximumProduct(int[] nums) {
        int l = nums.length - 1;
        Arrays.sort(nums);
        if (nums[0] > -1 || nums[l] < 0) {
            return nums[l] * nums[l - 1] * nums[l - 2];
        } else {
            return Math.max(nums[0] * nums[1], nums[l - 1] * nums[l - 2]) * nums[l];
        }
    }
}

744. 寻找比目标字母大的最小字母

class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        for (char letter : letters) {
            if (letter - target > 0) {
                return letter;
            }
        }
        return letters[0];
    }
}

717. 1比特与2比特字符

class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        int count = 0;
        for (int i = bits.length - 2; i >= 0; i--) {
            if (bits[i] == 1) {
                count++;
            } else {
                break;
            }
        }
        return count % 2 == 0;
    }
}

180. 连续出现的数字

# Write your MySQL query statement below
select distinct l1.num ConsecutiveNums from Logs l1 join Logs l2 on l1.id=l2.id-1 join Logs l3 on l1.id=l3.id-2 where l1.num=l2.num and l2.num=l3.num

830. 较大分组的位置

class Solution {
    public List<List<Integer>> largeGroupPositions(String S) {
        S += "-";
        List<List<Integer>> result = new ArrayList<>();
        int index = 0, start = 0;
        char preChar = ' ';
        for (char c : S.toCharArray()) {
            if (preChar != c) {
                if (index - start > 2) {
                    result.add(Arrays.asList(start, index - 1));
                }
                start = index;
            }
            preChar = c;
            index++;
        }
        return result;
    }
}

197. 上升的温度

# Write your MySQL query statement below
select w2.Id from Weather w1,Weather w2 where DATEDIFF(w2.RecordDate,w1.RecordDate) = 1 and w2.Temperature > w1.Temperature

6. Z 字形变换

class Solution {
   public String convert(String s, int numRows) {
       if (numRows == 1) {
            return s;
        }
        List<List<Character>> lists = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            lists.add(new ArrayList<>());
        }
        boolean flag = true;
        int index = 1;
        for (char c : s.toCharArray()) {
            if (flag) {
                lists.get(index - 1).add(c);
                if (index == numRows) {
                    flag = false;
                    index--;
                } else {
                    index++;
                }
            } else {
                lists.get(index - 1).add(c);
                if (index == 1) {
                    flag = true;
                    index++;
                } else {
                    index--;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for (List<Character> list : lists) {
            for (Character c : list) {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}

367. 有效的完全平方数

class Solution {
    public boolean isPerfectSquare(int num) {
        long i = 0;
        while (true) {
            i++;
            if (i * i == num) {
                return true;
            }
            if (i * i > num) {
                return false;
            }
        }
    }
}

925. 长按键入

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        int index = 0;
        char[] chars = typed.toCharArray();
        for (char c : name.toCharArray()) {
            if (index == chars.length) {
                return false;
            }
            for (int i = index; i < chars.length; i++) {
                index++;
                if (c == chars[i]) {
                    break;
                }
            }
        }
        return name.charAt(name.length() - 1) == chars[chars.length - 1];
    }
}

229. 求众数 II

class Solution {
   public List<Integer> majorityElement(int[] nums) {
        if (nums.length < 1) {
            return new ArrayList<>();
        }
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        int max = nums.length / 3 + 1;
        return map.entrySet().stream().filter(m -> m.getValue() >= max).map(x -> x.getKey()).collect(Collectors.toList());
    }
}

240. 搜索二维矩阵 II

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int length = matrix.length;
        int y = length == 0 ? -1 : matrix[0].length - 1;
        if (y < 0) {
            return false;
        }
        for (int[] row : matrix) {
            for (; y >= 0; --y) {
                int cur = row[y];
                if (cur == target) {
                    return true;
                } else if (cur > target) {
                } else {
                    break;
                }
            }
        }
        return false;
    }
}

162. 寻找峰值

class Solution {
    public int findPeakElement(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            int preNum = i == 0 ? Integer.MIN_VALUE : nums[i - 1];
            int nextNum = i == nums.length - 1 ? Integer.MIN_VALUE : nums[i + 1];
            if (nums[i] > preNum && nums[i] > nextNum) {
                return i;
            }
        }
        return 0;
    }
}

203. 移除链表元素

class Solution{
    private List<Integer> list = new ArrayList<>();
    
    public ListNode removeElements(ListNode head, int val) {
        getList(head, val);
        if (list.isEmpty()) {
            return null;
        }
        ListNode listNode = new ListNode(list.get(0));
        getNode(listNode, 1);
        return listNode;
    }

    private void getList(ListNode node, int val) {
        if (node != null) {
            if (node.val != val) {
                list.add(node.val);
            }
            getList(node.next, val);
        }
    }

    private void getNode(ListNode node, int index) {
        if (index < list.size()) {
            node.next = new ListNode(list.get(index));
            getNode(node.next, index + 1);
        }
    }
}

747. 至少是其他数字两倍的最大数

class Solution {
    public int dominantIndex(int[] nums) {
        if (nums.length == 1) {
            return 0;
        }
        int max1, max2, index;
        if (nums[0] > nums[1]) {
            index = 0;
            max1 = nums[0];
            max2 = nums[1];
        } else {
            index = 1;
            max1 = nums[1];
            max2 = nums[0];
        }
        for (int i = 2; i < nums.length; i++) {
            if (nums[i] > max1) {
                max2 = max1;
                max1 = nums[i];
                index = i;
                continue;
            }
            if (nums[i] > max2) {
                max2 = nums[i];
            }
        }
        if (max1 >= max2 * 2) {
            return index;
        }
        return -1;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值