LeetCode
三笠·阿卡曼
日拱一卒无有尽,功不唐捐终入海。
展开
-
记某公司面试算法题:查找一个有序数组某个数字出现的次数
记录记某公司面试算法题:查找一个有序数组某个数字出现的次数,要求是不能使用暴力破解的方式;本来知道怎么做,结果因为不会写二分导致没手撕出来,着实够菜的。。代码package com.vleus.algorithm.strings;/** * @author vleus * @date 2021年09月26日 20:26 */public class GetNumCount {// public static int getNumCount(int[] array, int nu原创 2021-09-27 23:18:06 · 193 阅读 · 3 评论 -
记一次某公司面试题:合并有序数组
来源2021/09/24:接到某公司面试,手撕一到合并有序数组的题,当时做的差不多了,面试官时间给的相对短了一些,临界值处理有问题, 没完全写出来有些遗憾,不过至少自己思路没错,参考网上给出的资料,现整理出一个比较好的解决方式,自己也只是写了一点测试用例,若有错误,烦请指正!具体题目不讲了,就看题目标题吧上代码package com.vleus.algorithm.strings;import java.util.Arrays;/** * @author vleus * @date 20原创 2021-09-26 18:51:36 · 167 阅读 · 2 评论 -
LeetCode #461 汉明距离
题目两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。示例最佳代码package com.vleus.algorithm.bit_operator;/** * @author vleus * @date 2021年08月03日 22:35 */public class HammingDistance { //方法一:异或:调库统计1的个数 public int hammingDistanc原创 2021-08-03 22:59:41 · 101 阅读 · 0 评论 -
LeetCode #17 电话号码的字母组合
题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number示例代码package com.vleus.algorithm.backtrack;import java.util.ArrayList;imp原创 2021-06-27 13:32:52 · 94 阅读 · 0 评论 -
LeetCode #46 全排列
题目给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例代码package com.vleus.algorithm.backtrack;import java.util.*;/** * @author vleus * @date 2021年06月26日 22:03 */public class Permutation { //定义一个辅助集合,保存已经用过的数 Set<Integer> filledNu原创 2021-06-26 22:26:11 · 71 阅读 · 0 评论 -
回溯算法--八皇后问题
八皇后问题在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。问有多少种摆法。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。代码实现package com.vleus.algorithm.backtrack;im原创 2021-06-26 22:03:38 · 277 阅读 · 1 评论 -
LeetCode #1143 最长公共子序列
题目给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。来源:力扣(LeetCode)链接:https://leetcode-原创 2021-06-20 16:51:41 · 65 阅读 · 0 评论 -
LeetCode #70 爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例最佳代码斐波那契的变种,动态规划即可package com.vleus.algorithm.dynamic_programming;/** * @author vleus * @date 2021年06月17日 22:55 */public class ClimbStairs { public static int c原创 2021-06-17 23:26:07 · 83 阅读 · 1 评论 -
LeetCode #121 买卖股票的最佳时机
题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock示例代码package co原创 2021-06-17 22:46:08 · 67 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
斐波那契数列的三种实现方式package com.vleus.algorithm.dynamic_programming;/** * @author vleus * @date 2021年06月06日 11:56 */public class Fibonacci { //方法一: 递归实现 public static int fib2(int n) { if (n == 0) return 0; if(n==1) return 1;原创 2021-06-12 10:10:48 · 77 阅读 · 0 评论 -
设计模式初识(一)
设计模式祖训对接口编程而不是对实现编程,优先使用对象组合而不是继承;设计模式类型创建型模式结构型模式行为型模式设计的七大原则开闭原则扩展新类而不是修改旧类;里氏替换原则继承父类而不是改变父类;依赖倒置原则面向接口编程而不是面向实现类;单一职责原则每个类只负责自己的事情,而不是变成万能类;接口隔离原则各个类简历自己的专用接口,而不是建立万能接口;迪米特法则无需直接交互的两个类,如果需要交互,使用中间者;合成复用原则优先使用组合,其次继承为什么使用创建型模式创原创 2021-05-30 18:54:47 · 107 阅读 · 0 评论 -
LeetCode #621 任务调度器
题目给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。来源:力扣(LeetCode)链接:https://leetcode-cn.原创 2021-05-30 15:49:04 · 75 阅读 · 0 评论 -
LeetCode #45 跳跃游戏II
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump-game-ii示例最佳代码package com.vleus.algorithm.greedy;/** * @author vleus * @date 2021年05月30日 10:2原创 2021-05-30 10:32:28 · 97 阅读 · 1 评论 -
LeetCode #55 跳跃游戏
题目给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例最佳代码class Solution { public boolean canJump(int[] nums) { //定义一个变量,保存当前最远能跳到的位置 int farthest = 0; //遍历数组,更新farthest for (int i = 0; i &l原创 2021-05-29 11:27:50 · 76 阅读 · 0 评论 -
LeetCode #98 验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree示例...原创 2021-05-26 23:52:00 · 66 阅读 · 0 评论 -
LeetCode #110 平衡二叉树
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例最佳代码package com.vleus.algorithm.binary_tree;/** * @author vleus * @date 2021年05月26日 22:58 */public class BalancedBinaryTree { //先序遍历 public boolean isBalanced原创 2021-05-26 23:09:01 · 111 阅读 · 0 评论 -
LeetCode #226 翻转二叉树
题目最佳代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode ri原创 2021-05-26 22:50:57 · 78 阅读 · 0 评论 -
二叉树相关
二叉树遍历定义二叉树结构package com.vleus.algorithm.binary_tree;/** * @author vleus * @date 2021年05月25日 22:53 */public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode() { } public TreeNode(int val) {原创 2021-05-25 23:06:56 · 96 阅读 · 0 评论 -
LeetCode #75 颜色分类
题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-colors示例最佳代码基于选择排序class Solution { public void sortColors(int[] nums) { //定义一个指原创 2021-05-24 23:09:25 · 74 阅读 · 0 评论 -
LeetCode #215 数组中的第K大个元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例最佳代码原创 2021-05-23 23:32:00 · 90 阅读 · 0 评论 -
LeetCode #20 有效括号
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses示例最佳代码class Solution { public boolean isValid(String s) { Deque<Charact原创 2021-05-19 22:49:43 · 99 阅读 · 0 评论 -
LeetCode #146 LRU缓存机制
题目最近一次没有使用到的数据删掉运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上原创 2021-05-19 00:00:05 · 109 阅读 · 0 评论 -
LeetCode #438 找到字符串中所有字母异位词
题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string示例最佳代码import java.util.ArrayList;im原创 2021-05-16 22:55:11 · 88 阅读 · 0 评论 -
LeetCode #287 寻找重复数
题目给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-the-duplicate-number示例代码利用Map实现class Solution { public int findDuplicate(int[] nums) {原创 2021-05-16 22:54:55 · 86 阅读 · 0 评论 -
LeetCode #206 链表反转
经典题目,直接贴代码package com.vleus.algorithm.linked_list;/** * @author vleus * @date 2021年05月15日 12:08 */public class ReverseLinkedList { //迭代法解决 public ListNode reverseList1(ListNode head) { // 定义两个指针指向当前访问的节点以及上一个节点 ListNode cur原创 2021-05-15 16:49:52 · 76 阅读 · 0 评论 -
LeetCode #239 滑动窗口最大值
题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sliding-window-maximum示例最佳代码import java.util.ArrayDeque;import java.util.Arrays;import java.util.Compa原创 2021-05-11 23:39:36 · 92 阅读 · 2 评论 -
LeetCode #316 去除重复字母
题目给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例原创 2021-05-11 22:10:28 · 78 阅读 · 0 评论 -
LeetCode #43 字符串相乘
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例代码package com.vleus.algorithm.strings;/** * @author vleus * @date 2021年04月18日 16:29 */public class MultiplyStrings { public static String addStrings(String num1, String num原创 2021-04-18 21:02:50 · 83 阅读 · 0 评论 -
LeetCode #415 两字符串相加
题目给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式思路相当于数学中的"竖式加法"代码class Solution { public String addStrings(String num1, String num2) { //原创 2021-04-18 15:54:46 · 72 阅读 · 1 评论 -
LeetCode #74 搜索二维矩阵
题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-a-2d-matrix示例代码将二维数组视为一维的有序数组解决即可,重点关注中位数是如何得出来的!class Solution { public boolean searchMatrix(int[][]原创 2021-04-15 00:02:59 · 116 阅读 · 0 评论 -
LeetCode #704 二分查找
题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-search代码主要是为了入门二分查找使用:class Solution { public int search(int[] nums, int target) { //定义初始查找范原创 2021-04-14 23:15:03 · 70 阅读 · 0 评论 -
LeetCode #48 旋转图像
题目给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。来源:力扣(LeetCode)链接:地址示例题解方法一(直接行转列,数据再做交换)其实就是先转置矩阵,然后翻转每一行。int n = matrix.length; //1.转置矩阵 for (int i = 0; i < n; i++) {原创 2021-04-13 23:53:04 · 85 阅读 · 0 评论 -
LeetCode #31下一个排列
题目实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。来源:力扣(LeetCode)链接:原题地址示例示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:n原创 2021-04-12 23:51:07 · 65 阅读 · 0 评论