![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法训练
龙小虬
很懒。
展开
-
java算法训练------比特位计数、字符串解码
比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]思路:都知道二进制数,主要靠的就是最后一位来控制整数是奇数还是偶数,每一个偶数/2的二进制中1的个数为偶数的二进制中1的个数,比如:4: 01008: 1000这里可以看出来他们的1的个数是一样的,由此,可以直接递推。sum[m]=sum[m/2原创 2021-04-29 23:45:41 · 139 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------寻找重复数、逆波兰表达式求值
寻找重复数给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [1,1,2]输出:1提示:2 <= n <= 3 * 10原创 2021-04-26 14:18:03 · 98 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------电话号码的字母组合、解码方法
电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:0 <= digits.l原创 2021-04-26 14:12:06 · 196 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------括号生成、在排序数组中查找元素的第一个和最后一个位置
括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8思路:利用回溯方法,这很类似与全排列,但是他的右括号需要根据左括号来判断,这是一个最重要的点。代码:ArrayList list;StringBuilder string原创 2021-04-25 00:20:45 · 142 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------二叉树的层序遍历、二叉树的中序遍历
二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]思路:我们可以看到他的树结构,遍历的结果是第一层、第二层…这也让我们知道了,将会遍历根节点,然后就是左节点、右节点。代码:List<List<Integ原创 2021-04-25 00:13:35 · 77 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------最大数、合并区间
最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例 2:输入:nums = [3,30,34,5,9]输出:"9534330"示例 3:输入:nums = [1]输出:"1"示例 4:输入:nums = [10]输出:"10"提示:1 <= nums.length <= 1000 <原创 2021-04-22 01:00:39 · 149 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------打乱数组、被围绕的区域
打乱数组给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果示例:输入["Solution", "shuffle", "reset", "shuffle"][[[1, 2, 3]], [], [], []]输出[null, [3, 1, 2],原创 2021-04-21 17:05:00 · 60 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------搜索二维矩阵 II、矩阵置零
搜索二维矩阵 II编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],原创 2021-04-21 16:56:12 · 118 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------Pow(x, n)、删除链表的倒数第 N 个结点
Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25提示:-100.0 < x < 100.0-2^31 <= n <= 2^31-1-104 <原创 2021-04-21 16:40:45 · 106 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------两整数之和、颜色分类
两整数之和不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1思路:既然不能使用+、-,我们知道位运算、与运算、异或运算可以进行简单的乘除,那么肯定就可以写出+、-,并且效率比使用+、-更加快。直接使用位运算计算即可代码:public int getSum(int a, int b) { while(b != 0){原创 2021-04-21 00:10:23 · 56 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------前 K 个高频元素、有效的数独
前 K 个高频元素给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的思路:原创 2021-04-20 18:57:34 · 360 阅读 · 0 评论 -
java算法训练------ LeetCode 精选 TOP 面试题------单词搜索、单词拆分
单词搜索给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"输出:true示例原创 2021-04-15 14:55:00 · 117 阅读 · 0 评论 -
java算法训练------ 腾讯精选练习 50 题------合并K个升序链表、排序链表
合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:list原创 2021-04-14 00:06:37 · 110 阅读 · 2 评论 -
java算法训练------ 腾讯精选练习 50 题------ 二叉树的最近公共祖先、二叉搜索树中第K小的元素
二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x的深度尽可能大(一个节点也可以是它自己的祖先)。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5,1,6,原创 2021-04-12 14:19:36 · 67 阅读 · 0 评论 -
java算法训练------ 腾讯精选练习 50 题------字符串相乘、搜索旋转排序数组
字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类原创 2021-04-08 11:26:36 · 93 阅读 · 0 评论 -
java算法训练------ 腾讯精选练习 50 题------旋转链表、全排列
旋转链表给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]提示:链表中节点的数目在范围 [0, 500] 内-100 <= Node.val <= 1000 <= k <= 2 * 109思路:我们可以发现,他的移动是每一次移动最后一个节点到头结点,所原创 2021-04-08 15:53:32 · 84 阅读 · 0 评论 -
java算法训练------ 腾讯精选练习 50 题------螺旋矩阵、螺旋矩阵II
螺旋矩阵给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]![在这里插入图片描述](https://img-blog.csdnimg.cn/202104原创 2021-04-08 17:13:53 · 103 阅读 · 0 评论 -
java算法训练------ 腾讯精选练习 50 题------不同路径、格雷编码
不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下原创 2021-04-10 00:06:04 · 80 阅读 · 0 评论 -
java算法训练------字符串处理------Z 字形变换、(面试题)计算器
1.Z字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入原创 2021-04-03 21:57:35 · 260 阅读 · 0 评论 -
java算法训练------贪心算法------跳跃游戏 II、检查数组对是否可以被 k 整除
1.跳跃游戏 II给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。思路:因为题目后面有一个声明,我们一定能够达到最后一个下标,所以我们可以从前往后走,不原创 2021-04-01 15:48:27 · 188 阅读 · 0 评论 -
java算法训练------回溯算法------子集(I 、II)
1.子集 I给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有原创 2021-04-01 11:54:28 · 184 阅读 · 0 评论 -
java算法训练------贪心算法------搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false提示:m == mat原创 2021-03-30 23:28:44 · 238 阅读 · 0 评论 -
java算法训练------贪心算法------跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2021-03-30 22:49:37 · 231 阅读 · 0 评论