![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
Java笔试编程题
论文复现并优化
这个作者很懒,什么都没留下…
展开
-
有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。class Solution { public boolean isValid(String s) { if(s.length() % 2 == 1){ return false; } HashMap<Ch原创 2020-09-11 15:21:17 · 78 阅读 · 0 评论 -
不使用运算符 + 和 - ,计算两整数 a 、b 之和。两整数之和
利用位操作实现加法首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: 5—101,7—111第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。第二步:计算进位值,得到1010,相当于各位进行与操作得到1原创 2020-09-10 16:12:29 · 196 阅读 · 0 评论 -
验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。class Solution { long pre = Long.MIN_VALUE; public boolean isValidBST(TreeNode root) { if (root == null) { ret原创 2020-09-10 15:52:46 · 89 阅读 · 0 评论 -
x 的平方根
使用牛顿法:先放代码:public class Solution { public int mySqrt(int a) { long x = a; while (x * x > a) { x = (x + a / x) / 2; } return (int) x; }}先建立一个函数:f(x) = xx - a* 令 f(x) = 0通过泰勒展开公式可得:f(x0) + (x-x0原创 2020-09-09 16:18:40 · 110 阅读 · 0 评论 -
罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000class Solution { public int romanToInt(String s) { Map<String, Intege原创 2020-09-09 15:41:12 · 67 阅读 · 0 评论 -
全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]采用回溯法的方式来解决class Solution { public List<List<Integer>> permute(int[] nums) { ArrayList<List<Integer>> al =原创 2020-09-05 17:33:41 · 66 阅读 · 0 评论 -
二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。class Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; } if(root.left == null && root.right == null){ return 1; }原创 2020-09-04 17:00:28 · 78 阅读 · 0 评论 -
删除链表中的节点
class Solution { public ListNode deleteNode(ListNode node,ListNode head) { //使用两个指针记录当前元素和上一个元素,通过对比当前元素是否是要删除的元素 ListNode slow = head,fast = head.next,newhead = head; while(fast.val != node.val){ fast = fast.next;原创 2020-09-02 17:48:01 · 69 阅读 · 0 评论 -
子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)
采用位运算的方式,1代表选取,0代表不选该元素。class Solution { public List<List<Integer>> subsets(int[] nums) { ArrayList<List<Integer>> al = new ArrayList<List<Integer>>(); for(int i= 0;i<(1 << nums.length);i++) {原创 2020-09-02 16:47:03 · 776 阅读 · 0 评论 -
两数之和Java
**问题描述:**给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。//采用HashMap存储数组值,进行查找差值的方式,通过Value记录下标。class Solution { public int[] twoSum(int[] nums, int target) { HashMap<Integer, Integer>原创 2020-09-02 11:28:49 · 143 阅读 · 0 评论 -
KMP
public class KMP { private int[][] dp; private String pat; public KMP(String pat) { this.pat = pat; int M = pat.length(); // dp[状态][字符] = 下个状态 dp = new int[M][256]; // base case dp[0][pat.charAt(原创 2020-08-01 12:09:32 · 156 阅读 · 0 评论 -
旋转图像
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。通过先将数组进行左下右上对角线对称映射,在上下翻转。class Solution { public void rotate(int[][] matrix) { int col = matrix.length; int row = matrix[0].length; for(原创 2020-07-29 11:23:40 · 83 阅读 · 0 评论 -
有效的数独
题目分析由于数独为9\times 99×9结构,故为了验证是否有效需要两轮循环优化的关键就在于如何通过一次两轮循环,完成横、纵、小宫的有效性判断,需要简单推导一下坐标之间的关系2. 简单推导我们假设外层循环变量为ii,内层循环变量为jj,那么:board[i][.]board[i][.]表示第ii行,board[.][j]board[.][j]表示第jj列board[i][j]board[i][j]唯一表示第ii行,第jj列的元素如何用坐标表示小宫内的格子?由于一共有99个小宫,每个小宫.原创 2020-07-28 18:26:08 · 233 阅读 · 0 评论 -
LeetCode初级算法--只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?输入: [2,2,1]输出: 1思路:要想实现线性时间复杂度O(n),则暴力破解肯定不行,可以使用hash的方式来进行,可以实现O(n)的复杂度。class Solution { public int singleNumber(int[] nums) { Map<Integer, Integer原创 2020-07-24 22:51:04 · 93 阅读 · 0 评论