
LC
文章平均质量分 58
常见的算法
动态规划
bfs
dfs等
逍遥ovo
oxen and horses
展开
-
几种常见的排序
常见排序一、插入排序1、插入排序:2、希尔排序二、选择排序三、堆排序四、冒泡排序五、快速排序六、归并排序七、简单总结一、插入排序1、插入排序:先看代码 public static void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int tmp = arr[i]; int j = i-1; for (;j <=原创 2021-05-16 22:04:59 · 234 阅读 · 0 评论 -
【剑指 Offer II】1 整数除法
题目链接 【剑指Offer II】 001 整数除法描述给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1总结一下原创 2021-08-08 00:17:15 · 561 阅读 · 1 评论 -
奇安信春招测试工程师(4月11日)笔试编程
组合问题题目描述有 1 元,2 元,5 元,10 元纸币,输入一个数据 n,求这些纸币加起来等于 N 的组合数。题目记不太清了,大概是这个意思:w + 2x + 5y + 10z = n求组合数输入与输出输入 37输出 160思路暴力(当时就这么写的)四个 for 循环广度优先搜索 + 回溯将 1,2,5,10 变为数组,方便后面取用利用 bfs 进行搜索剪枝代码暴力 public int method(int n) {原创 2022-04-12 00:03:11 · 962 阅读 · 0 评论 -
【富途编程题】做项目的最大收益问题(贪心)、最长无重复子串(滑动窗口)
题目做项目的最大收益问题链接 做项目的最大收益问题题目描述给定两个整数W和K,W代表你拥有的初始资金,K代表你最多可以做K个项目。再给定两个长度为N的正数数组costs[]和profits[],代表一共有N个项目,costs[i]和profits[i]分别表示第i号项目的启动资金与做完后的利润(注意是利润,如果一个项目的启动资金为10,利润为4,代表该项目最终的收入为14)。你不能并行只能串行地做项目,并且手里拥有的资金大于或等于某个项目的启动资金时,你才能做这个项目。该如何选择做项目原创 2021-09-09 21:27:21 · 567 阅读 · 0 评论 -
剑指 Offer II 33. 变位词组
题目链接 剑指 Offer II 33. 变位词组描述给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。输入与输出输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]思路这个题是今年(2021)百度提前批面试题这个题是今原创 2021-08-25 00:30:33 · 247 阅读 · 3 评论 -
剑指 Offer II 31. (LRU)最近最少使用缓存(双向链表 + 哈希表 / LinkedHashMap)
题目链接 剑指 Offer II 031. 最近最少使用缓存描述运用所掌握的数据结构,设计和实现一个 LRU (Least Recently Used,最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key)如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value)如果关键字已经存原创 2021-08-24 18:14:15 · 177 阅读 · 0 评论 -
剑指 Offer II 28. 展平多级双向链表
题目链接 剑指 Offer II 28. 展平多级双向链表描述多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示.给定位于列表第一级的头节点,请扁平化列表,即将这样的多级双向链表展平成普通的双向链表,使所有结点出现在单级双链表中。输入与输出输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,nul原创 2021-08-22 14:52:09 · 201 阅读 · 0 评论 -
【剑指 Offer II】 16. 不含重复字符的最长子字符串
题目链接【剑指 Offer II】 16. 不含重复字符的最长子字符串描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。输入与输出输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。思路暴力遍历 + HashSet(超时!!!超时!!!超时!!!)双层嵌套遍历字符串;判断 set 是否能成功添加,如果能添原创 2021-08-17 01:22:39 · 229 阅读 · 0 评论 -
【剑指 Offer II】 15. 字符串中的所有变位词
题目链接【剑指 Offer II】 15. 字符串中的所有变位词描述给定两个字符串 s 和 p,找到 s 中所有 p 的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。变位词 指字母相同,但排列不同的字符串。输入与输出输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的变位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的变位词思路滑动窗原创 2021-08-17 00:52:01 · 163 阅读 · 0 评论 -
【剑指 Offer II 】 14. 字符串中的变位词
题目链接【剑指 Offer II 】 14. 字符串中的变位词描述给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的 子串输入与输出输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).思路题目求的是 s2 中是否包含 s1 (s1 可以自由组合),于是我想到了s2 求全排列;嵌套循环,把 s1 可能的子原创 2021-08-16 02:53:24 · 243 阅读 · 0 评论 -
【剑指 Offer II】 12 左右两边子数组的和相等
题目链接【剑指 Offer II】 12 左右两边子数组的和相等描述给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1输入与输出输入:nums = [1,7,3,6,5,6]原创 2021-08-13 01:52:32 · 348 阅读 · 0 评论 -
【剑指 Offer II】 10 和为 k 的子数组
题目链接 【剑指 Offer II】 010 和为 k 的子数组描述给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数输入与输出输入:nums = [1,1,1], k = 2输出: 2解释: 此题 [1,1] 与 [1,1] 为两种不同的情况思路暴力搜索前缀和 + 哈希表优化( 这个方法也是看了 官方题解视频 才搞懂的,讲得也比较清晰。)具体思路看代码详解!代码暴力搜索class Solution { public in原创 2021-08-13 01:23:08 · 164 阅读 · 0 评论 -
【剑指 Offer II】9 乘积小于 K 的子数组
题目连接【剑指 Offer II】009 乘积小于 K 的子数组描述给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。输入与输出输入: nums = [10,5,2,6], k = 100 输出: 8解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2]并不是乘积小于100的子数组。思路滑动窗口的原创 2021-08-09 23:45:36 · 146 阅读 · 0 评论 -
【剑指 Offer II】8 和大于等于 target 的最短子数组
题目链接【剑指Offere II】008 和大于等于 target 的最短子数组描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。注意:明确是正数,后面解题需要用到!输入与输出输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:原创 2021-08-09 23:08:36 · 348 阅读 · 0 评论 -
【剑指 Offer II】7 数组中和为 0 的三个数
题目链接【剑指Offer II】007 数组中和为 0 的三个数描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。总结:三个数字;和为 0;得到的结果集合不重复。输入与输出输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]思路刚开始的思路就 dfs + 回溯 + 剪枝,但是超时了。代码原创 2021-08-09 22:25:36 · 311 阅读 · 0 评论 -
【剑指 Offer II】6 排序数组中两个数字之和
题目链接【剑指Offer II】006 排序数组中两个数字之和描述给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。原创 2021-08-08 19:35:01 · 224 阅读 · 0 评论 -
【剑指 Offer II】 5 单词长度的最大乘积
题目链接【剑指Offer II】 005 单词长度的最大乘积描述给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。输入与输出输入: words = [“abcw”,“baz”,“foo”,“bar”,“fxyz”,“abcdef”]输出: 16解释: 这两个单词为 “abcw”, “fxyz”。它们不包含相同字原创 2021-08-08 19:25:13 · 327 阅读 · 0 评论 -
【剑指 Offer II】 4 只出现一次的数字
题目链接【剑指Offer II】004 只出现一次的数字描述给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰>出现 三次 。请你找出并返回那个只出现了一次的元素。进阶:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?输入与输出输入:nums = [2,2,3,2]输出:3思路如果不考虑 进阶 ,也就是 使用额外空间 的话,使用 哈希表 来做应该是很容易也是很快的。遍历数组;讲数字加入到哈希表中;遍历哈希表,原创 2021-08-08 18:31:17 · 195 阅读 · 0 评论 -
如何不使用四则运算符计算两数相加?
题目描述描述输入两个整数 a 和 b,不使用四则运算符的情况下,计算两个数相加。输入与输出输入:a = 10, b = 20 输出:30思路不使用四则运算符运算符,那么就只能使用位运算了。那么如何使用位于那算符呢?核心需要做两件事明确哪些不需要进位;明确哪些需要进位。例如 a = 11, b = 3;明确哪些不需要进位a ^ b = 1000;明确哪些需要进位a & b = 0011;让 a & b 的结果左移一位(进位)0110原创 2021-08-08 13:03:22 · 205 阅读 · 0 评论 -
【剑指 Offer II】 3 前 n 个数字二进制中 1 的个数
题目链接【剑指Offer】 003 前 n 个数字二进制中 1 的个数描述给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。输入与输出输入: n = 2输出: [0,1,1]解释:0 --> 01 --> 12 --> 10思路题不难,看看应该就会了。硬核解法遍历 0 到 n;分别求出 0 到 n 中 二进制 1 的个数;加入到数组中即可。找规律解法由此可以发现规律当前原创 2021-08-08 12:33:27 · 276 阅读 · 0 评论 -
【剑指 Offer II】2 二进制加法
题目链接 【剑指Offer II】 002 二进制加法描述给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。总结一下相当于高精度加法去掉前导 0输入与输出输入: a = “11”, b = “10”输出: “101”思路类似于 高精度加法求得两个二进制数相加的结果后找到第一个不为 0 的书籍,遍历后面的集合输出即可代码class Solution { public原创 2021-08-08 01:50:05 · 749 阅读 · 0 评论 -
递归全排列(Java)
题目给定一个数组 nums ,求出它所有的全排列。输入int[] nums = {1,2,3}输出1 2 31 3 22 1 32 3 13 1 23 2 1思路交换元素,得到不同组合递归;回溯,还原数组代码代码 static List<List<Integer>> res = new ArrayList<>(); public static void main(String[] args) {原创 2021-08-04 04:55:36 · 335 阅读 · 0 评论 -
网段划分 + 子网掩码相关计算
网段划分IP 地址分为两部分,网络号与主机号网络号:一个局域网的 IP 地址主机号:一个局域网内不同主机的 IP 地址不同的局域网网络号不能相同同一个局域网的主机号不能相同传统划分A类 0.0.0.0到127.255.255.255B类 128.0.0.0到191.255.255.255C类 192.0.0.0到223.255.255.255D类 224.0.0.0到239.255.255.255E类 240.0.0.0到247.255.255.255目前已经原创 2021-08-02 20:00:36 · 2715 阅读 · 0 评论 -
【LeetCode 40】 组合问题II(Java)
题目链接:组合问题II题目描述:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。注意:解集不能包含重复的组合。输入candidates = [10,1,2,7,6,1,5]target = 8输出[[1,1,6],[1,2,5],[1,7],[2,6]]思路这道题就三个要求在数组中找出和为 targe原创 2021-08-02 18:31:56 · 219 阅读 · 0 评论 -
高精度整数加法(java)
题目牛客链接:高精度整数加法题目描述输入两个用字符串表示的整数,求它们所表示的数之和。字符串的长度不超过10000。本题含有多组样例输入。输入98765432101234567890输出11111111100基本思路题目不难,就是比较难处理。字符串类型的题目貌似都比较繁琐!找出最长的字符串 num;将输入的两个字符串字符串 num1 和 num2 的数组逐个添加到数组后续进行相加;处理最长的字符串在没有遍历玩的情况下;处理溢出的数字;遍历输出。原创 2021-07-23 03:05:00 · 381 阅读 · 0 评论 -
年会抽奖(Java 含彩蛋)
目录题目链接基本思路错排问题思路代码展示彩蛋题目链接牛客链接:年会抽奖题目描述:今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?输入:123输出0 %50 %33.33%基本思路首先要正确理解题意,题目求解的是 求无人获奖的概率,原创 2021-07-23 01:24:24 · 821 阅读 · 3 评论 -
求正数数组的最小不可组成和(Java实现,01背包衍生问题)
目录题目思路与代码展示与01背包的思路转换二维数组代码展示二维数组示意图优化代码题目链接牛客:求正数数组的最小不可组成和题目给定一个全是正数的数组arr,定义一下arr的最小不可组成和的概念: 1,arr的所有非空子集中,把每个子集内的所有元素加起来会出现很多的值,其中最小的记为min,最大的记为max; 2,在区间[min,max]上,如果有一些正数不可以被arr某一个子集相加得到,那么这些正数中最小的那个,就是arr的最小不可组成和; 3,在区间[min,max]上,如果所有的数都可原创 2021-07-17 20:55:46 · 380 阅读 · 0 评论 -
LeetCode 外观数列(当你们也看不懂这个题的时候,我就放心了)
一、我以为只有我不会,实际上只有我不会今天晚上看到一个 LeetCode 的题:题目链接:https://leetcode-cn.com/problems/count-and-say/他给的样例是这样的:不知道大家与没有注意到 1 <= n <= 30。我当时还没注意这个,看了半天的题目还是没看懂,于是去评论区看了看,果然,评论区的大佬从来没让我失望:好家伙,我直接好家伙。顿时想起了一句话,社会很单纯,复杂的是人。个个都是人才啊!我咋没想到这种方法呢?我笑了半天,想想毕竟原创 2021-06-19 23:28:01 · 230 阅读 · 4 评论 -
从给女朋友带礼物到01背包问题
不写标题感觉很丑当一个问题有很多种可能,有很多种答案的时候,并且这一次选择和上一次选择有联系的时候。我们就需要用到动态规划!而背包问题就是动态规划中一个典型的问题!01背包问题有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值问最多能装入背包的总价值是多大?0代表不拿,1代表拿我试着用一些比较能够理解的例子来解决动态规划种的问题。现在我要搭飞机去找女朋友,并且想带一行李箱的南京土特产给她。但是由于买的特价机票,没有免费的行李额不能托运。原创 2021-06-10 15:18:48 · 258 阅读 · 2 评论 -
二叉搜索树的增、删、查
二叉搜索树一、 什么是二叉搜索树?二、二叉搜索树查找value为key节点三、二叉搜索树增加value为key的节点四、二叉搜索树删除value为key的节点(替罪羊删除法)五、总结一、 什么是二叉搜索树?二叉搜索树又称二叉排序树或是二叉查找树,关于它的定义:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二、二叉搜索树查找value为key节点二叉搜索树的查找是比较方便的,每次都能排除一半的原创 2021-05-20 13:55:20 · 353 阅读 · 0 评论 -
循环和条件中常见习题
分支循环结构练习1、求1———100之间的素数2、求某个数的阶乘3、求阶乘1到n的阶乘的和4、找到某些年之间的闰年5、得到数字的每一位6、打印九九乘法表7、获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列8、判断一个数是不是素数9、参数二进制中 1 的个数10、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。11、求1000以内的水仙花数12、模拟密码输入场景1、求1———100之间的素数2、求某个数的阶乘3、求阶乘1到n的阶乘的和4、找到某些年原创 2021-05-03 13:19:52 · 128 阅读 · 0 评论 -
字符统计与查找 和 最小的 k 最数字(Comparator 比较器实战应用)
目录题目链接基本思路与代码展示字符统计思路代码使用普通排序使用 Comparator查找和最小的 k 对数字思路代码题目链接牛客:字符统计LeetCode:373. 查找和最小的 K 对数字字符统计输入输入一个只包含小写英文字母和数字的字符串输出一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。测试用例输入:aaddccdc输出:cda解释c 和 d 出现 3 次,a 出现两次,而 c 的 ascii 排序在 d原创 2021-07-13 18:48:49 · 155 阅读 · 0 评论 -
迷宫问题(Java实现,求最小路径(不需要过程))
目录题目链接基本思路我先到终点我就是最优解准备代码实现题目链接迷宫中离出口最近的出口题目描述给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 ‘.’ 表示)和墙(用 ‘+’ 表示)。同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。每一步操作,你可以往 上,下,左 或者 右 移动一个格子。你不能进入墙所在的格子,你也不能离开迷宫。你的目标是找到离 entr原创 2021-07-11 20:16:18 · 756 阅读 · 0 评论 -
迷宫问题(Java实现,求最短路径)
题目链接迷宫问题定义一个二维数组: int maze[n][m]; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。输入描述:一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};样式输出:(0,0)(原创 2021-07-10 20:16:40 · 8893 阅读 · 15 评论 -
当我写出分割回文串的时候,面试官:那我走?
分割回文串题目:给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s="aab",返回1,因为回文分割结果["aa","b"]是切割一次生成的。解题思路:还是抓住动态规划的解题步骤初始值递推的过程转移方程打印 dp 数组返回值最开始还是要先进行特殊值处理:当字符串的长度为0,1 的时候,是不需要进行分割的!例如:s = "";s = "A";即:if(s.length() == 0 || s.leng原创 2021-06-15 19:22:14 · 116 阅读 · 0 评论 -
动态规划(带图)——查找两个字符串a,b中的最长公共子串
查找两个字符串a,b中的最长公共子串题目查找两个字符串str1,str2中的最长公共子串。若有多个,输出在较短串中最先出现的那个。测试用例:a b c d e f g h i j k l m n o pa b c s a f j k l m n o p q r s t u v w动态规划解法:时间复杂度:O(n^m)空间复杂度:O(n^2) public static String findMaxSubString(String str1,String str2) {原创 2021-06-14 23:42:43 · 570 阅读 · 2 评论