- 博客(7)
- 收藏
- 关注
原创 leetcode34 在排序数组中找出元素第一个位置和最后一个位置
思路: 1.使用一个辅助函数,用来查找出元素出现的位置 2.元素往前遍历,直到找到的元素不等于想查找的元素 3.元素往后遍历,直到找到的元素不等于想查找的元素。 4.然后把left和right放到数组中返回 5.辅助函数:用二分查找法。 代码: class Solution { public int[] searchRange(int[] nums, int target) { int find = searchRangeHelp(nums, target);
2021-12-10 21:20:45 188
原创 leetcode42 接雨水
思路: 1.从头到尾遍历数组,找出每一个位置能接的最多雨水,累加起来 2.每个位置:找出左边右边最高的,然后从左右最高的中找出最低的,最后用这个最低的减去每个位置的值,就是每个位置能装的水 代码: class Solution { public int trap(int[] height) { int sum = 0; for (int i = 1; i < height.length - 1; i++) { int max_l
2021-12-09 21:12:59 242
原创 leetcode73 矩阵置零
思路:创建两个boolean类型的标记数组(行和列),遍历矩阵,如果矩阵中某个数为0,那就把对应标记数组置位0(对应的行和列),再次遍历,判断标记数组,只要标记数组中行或列为true,就把对应行列的所有值置为0. 代码: class Solution { public void setZeroes(int[][] matrix) { //标记数组 int m = matrix.length, n = matrix[0].length; //创建两
2021-12-09 20:48:44 283
原创 leetcode64 最小路径和
思路: 1.创建一个二维dp数组作为结果返回 2.把数组最上边和最左边的最小值用dp存起来 3.再遍历所有数 每次取当前数的左边数和上边数当中的最小值。 4.返回 代码: class Solution { public int minPathSum(int[][] grid) { int m = grid.length, n = grid[0].length; int[][] dp = new int[m + 1][n + 1]; dp[
2021-12-07 22:05:15 67
原创 leetcode56 合并区间
思路: 1.把所有数组按从小到大排序,并创建一个二维数组res 2.遍历给定的二维数组 3.判断:如果是第一个数组或者遍历数组的第一个数大于上一个数组的第二个数,直接把这个数组加入到结果数组里;否则把上一个数组的第二个数更新为这次遍历数组的第二个数和上一个数组的第二个数中的最大值。 4.返回结果 代码: class Solution { public int[][] merge(int[][] intervals) { int[][] res = new int[int
2021-12-07 21:54:20 132
原创 leetcode55 跳跃游戏
思路: 1.用一个变量maxlen存储每次能走的最远的路 2.遍历数组中每一个数 3.每次需要判断能不能走到数组中那个数(数组下标 <= maxlen) 4.更新完maxlen 再判断能不能到数组最后 能就返回true 否则继续遍历 代码: class Solution { public boolean canJump(int[] nums) { int maxLen = 0; for (int i = 0; i < nums.length.
2021-12-07 21:36:07 165
原创 leetcode48 字母异位词分组
1.结果用hashMap保存 2.遍历字符数组中每一个字符串 3.把字符串转成字符数组并排序 4.判断hashmap中是否存在 并加入到map中 5.返回hashmap中所有value 实现代码: class Solution { public List<List<String>> groupAnagrams(String[] strs) { if (strs.length == 0 || strs == null) {
2021-12-07 21:26:41 404
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人