LeetCode
I can丶
这个作者很懒,什么都没留下…
展开
-
一些值得注意的算法题——动态规划
322. 零钱兑换 // dp[i]=min dp[i-cj]+1 // dp[i]表示达到i金额所需的最小硬币数 // cj表示第j枚硬币的面值 class Solution { public int coinChange(int[] coins, int amount) { Arrays.sort(coins); int[] dp = new int[amount + 5]; Arrays.fill(dp, amount + 1); dp[0] = 0;原创 2021-03-19 09:34:39 · 70 阅读 · 0 评论 -
一些值得注意的算法题——双指针
75. 颜色分类 // 左指针指向最左,右指针指向最右 // 遍历数组,如果是0则和左指针交换,左指针右移 // 如果是2则和右指针交换,右指针左移 // 因为数组是从左往右遍历,因此可保证左指针以左都是0 // 但是右指针却有可能将别的数换到i的位置,因此要i--,重新判断一下换来的数 class Solution { public void sortColors(int[] nums) { int n = nums.length; int l = 0, r = n - 1;原创 2021-03-13 09:17:24 · 94 阅读 · 0 评论 -
一些值得注意的算法题——队列、栈
239. 滑动窗口最大值 // 使用一个单调双端队列维护滑动窗口中的最大值次大值等 // 每次移动窗口,将队尾比新增元素小的都删除(因为无论这些元素在不在窗口中,新增元素都是最大元素) // 如果队首元素的索引等于当前移动窗口,移除的元素,则移除 class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums.length == 0) return new int[0]; Deque<In原创 2021-03-08 19:03:27 · 69 阅读 · 0 评论 -
一些值得注意的算法题——搜索、查找
240. 搜索二维矩阵Ⅱ // 从右上角开始搜索,保证不会错过元素 class Solution { public boolean searchMatrix(int[][] matrix, int target) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return false; int i = 0, j = matrix[0].length - 1; while (i <原创 2021-03-07 23:16:41 · 160 阅读 · 0 评论 -
一些值得注意的算法题——哈希表
哈希表按照值排序 字符串按照字符频率排序 class Solution { public void solve(String s) { Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (map.containsKey(c)) map.put(c, map.get(原创 2021-03-04 11:11:23 · 63 阅读 · 1 评论 -
一些值得注意的算法题——树
105. 从前序与中序遍历序列构造二叉树 // 前序遍历:【根节点,【左子树】,【右子树】】 // 中序遍历:【【左子树】,根节点,【右子树】】 class Solution { HashMap<Integer, Integer> inorder_v2id = new HashMap<>(); public TreeNode search(int[] preorder, int[] inorder, int pre_l, int pre_r, int in_l, int原创 2021-03-04 10:02:29 · 113 阅读 · 1 评论