leetcode每日一题
AKA石头
把握时间,掌握方向
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode n皇后问题
废话不多书直接上代码package com.ncst2.traceback;/** * @Date 2020/11/1 22:36 * @Author by LSY * @Description N 皇后问题 ,优化 */public class NQueen2 { /** * 存一个皇后的列号(在第几列) */ private int[] queens; /** * 存放每一列是否有皇后 */ private bo原创 2020-11-03 21:52:42 · 232 阅读 · 0 评论 -
剑指_Offer_37_序列化二叉树
解题思路使用BFS 遍历节点序列化过程 :将节点保存为一个字符串反序列化: 将节点从字符串中取出,保存到一个String 数组中 使用BFS 依次展开节点public class Codec { public String serialize(TreeNode root) { if(root==null){ return "[]"; } StringBuilder sb=new StringBuilder("[原创 2020-09-27 12:50:49 · 129 阅读 · 0 评论 -
剑指_Offer_35_复杂链表的复制
/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}*/class Solution { public Node copyRandomList(Node原创 2020-09-15 12:47:38 · 103 阅读 · 0 评论 -
剑指_Offer_53_I_在排序数组中查找数字_I_复杂版
引用leetcode 大佬:jyd链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/solution/mian-shi-ti-53-i-zai-pai-xu-shu-zu-zhong-cha-zha-5/class Solution { public int search(int[] nums, int target) { //搜索右边界 int.原创 2020-09-14 15:54:56 · 127 阅读 · 0 评论 -
剑指_Offer_53_I_在排序数组中查找数字_I_精简版
引用leetcode 大佬:jyd链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/solution/mian-shi-ti-53-i-zai-pai-xu-shu-zu-zhong-cha-zha-5/class Solution { public int search(int[] nums, int target) { return helper(nums,.原创 2020-09-14 15:52:23 · 147 阅读 · 0 评论 -
剑指_Offer_24_反转链表_双指针
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { /*我们可以申请两个指针: 第一个指针叫 pre,最初是指向 null 的 第二个指针 cur 指向 head,然后不断遍历 cur原创 2020-09-14 14:15:22 · 151 阅读 · 0 评论 -
剑指_Offer_24_反转链表_递归解法
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseList(ListNode head) { if(head==null|| head.next=原创 2020-09-14 14:13:38 · 146 阅读 · 0 评论 -
剑指_Offer_43_1~n整数中1出现的次数
解题思路思路来源于leetcode大佬 jyd链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/solution/mian-shi-ti-43-1n-zheng-shu-zhong-1-chu-xian-de-2/根据当前位 cur值的不同,分为以下三种情况当cur为0 的时候当 cur 为1 的时候当 cur 为2…9 的时候class Solution {原创 2020-09-10 12:43:06 · 132 阅读 · 0 评论 -
剑指_Offer_45_把数组排成最小的数
class Solution { public String minNumber(int[] nums) { int len=nums.length; String[] strs=new String[len]; //将数字转换为字符串 for(int i=0;i<len;i++){ strs[i]=String.valueOf(nums[i]); } //内置排序算法,使用原创 2020-09-09 12:59:09 · 138 阅读 · 0 评论 -
剑指_Offer_68_II_二叉树的最近公共祖先
解题思路采用递归思想,结束条件为(root = = null| |root= =p||root==q)一共可以分为3种情况左右子树都为空 ,说明 root 的左 / 右子树中都不包含 p,q返回 null左右子树都不为空,说明 p q 在异侧 ,返回公共祖先结点 root左子树为空,右子树不为空 返回右子树右子树为空,左子树不为空 返回左子树class Solution { public TreeNode lowestCommonAncestor(TreeNode root, T原创 2020-09-08 18:45:41 · 137 阅读 · 0 评论 -
剑指_Offer_58_II_左旋转字符串
class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n,s.length())+s.substring(0,n); }}第二种方法class Solution { public String reverseLeftWords(String s, int n) { StringBuilder sb=new StringBuilder(); for(原创 2020-09-08 17:59:57 · 210 阅读 · 0 评论 -
剑指Offer_50_第一个只出现一次的字符
解题思路第一次遍历 通过map K V 结构存储,当映射中存在此元素时,将 V 置为false第二次遍历,如果映射中的 V 为 true 则 返回class Solution { public char firstUniqChar(String s) { Map<Character,Boolean> map=new LinkedHashMap<>(); char [] chars=s.toCharArray(); //第一原创 2020-09-07 23:08:08 · 156 阅读 · 0 评论 -
剑指Offer_33_二叉搜索树的后序遍历
解题思路由于是后序遍历,所以数组最后一个元素是根节点递归开始传入起始元素 和 末尾元素当起始索引(left)<(right)结束递归执行循环,找到第一个比根节点大的元素(temp),它的左面是树的左子树,右面到根节之间是树的右子树判断temp 到 root 之间的结点是否全部大于根节点进行下一次递归,直到满足中止条件class Solution { public boolean verifyPostorder(int[] postorder) { int len=原创 2020-09-07 18:12:05 · 127 阅读 · 0 评论 -
剑指Offer_66_构建乘积数组
class Solution { public static int[] constructArr(int[] a) { if(a.length == 0) { return new int[0]; } int[] b = new int[a.length]; //? b[0] = 1; int tmp = 1;原创 2020-09-01 21:07:10 · 140 阅读 · 0 评论 -
LeetCode 220. 存在重复元素 III
题目描述在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。如果存在则返回 true,不存在返回 false。解决思路题目意思翻译一下:在数组 nums[i] 中,在任意有效区间 [i, i + k] 里是否存在两个数的绝对值小于等于 t,即|nums[i] - nums[j] | <= t∣nums[i]−nums[j]∣<=t等价于 nums[i] -原创 2020-08-18 21:50:10 · 223 阅读 · 0 评论 -
【leetcode-每日一题】【动态规划】如何求解金矿问题
问题描述很久很久以前,有一位国王拥有5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需要5个工人来挖掘;有的金矿储量是200kg黄金,需要3个工人来挖掘……如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半的金矿。要求用程序求出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?代码实现 /** * @param w 工人数量 * @param p 金矿开采所需的工人数量 * @par原创 2020-06-02 20:18:21 · 865 阅读 · 0 评论 -
【leetcode-每日一题】字典序算法--获得全排列下一个数
题目给出一个正整数,找出这个正整数所有数字全排列的下一个数。说通俗点就是在一个整数所包含数字的全部组合中,找到一个大于且仅大于原数的新整数。让我们举几个例子。如果输入12345,则返回12354。如果输入12354,则返回12435。如果输入12435,则返回12453。思路从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的边界。让逆序区域的前一位和逆序区域中大于它的最小的数字交换位置。把原来的逆序区域转为顺序状态代码package com.interview;原创 2020-05-28 10:48:55 · 299 阅读 · 0 评论 -
【leetcode-每日一题】贪心算法实现删除k个元素的最小值
题目给出一个整数,从该整数中去掉k个数字,要求剩下的数字形成的新整数尽可能小。应该如何选取被去掉的数字?其中整数的长度大于或等于k,给出的整数的大小可以超过long类型的数字范围。解题思路把原整数的所有数字从左到右进行比较,如果发现某一位数字大于它右面的数字,那么在删除该数字后,必然会使该数位的值降低,因为右面比它小的数字顶替了它的位置。所有代码均已上传github,有兴趣的同学可以看看 https://github.com/999bug代码实现package com.inter原创 2020-05-28 10:42:35 · 497 阅读 · 0 评论 -
【leetcode-每日一题】计算二叉树的深度
递归实现思路1.若根节点是空节点,则为空树,深度为0;2.若根节点不为空,则选择左子树和右子树中深度大的为新树,原树的深度是新树的深度+1; /** * 递归实现 计算二叉树深度 * * @param treeNode 二叉树 * @return 二叉树深度 */ public int getBinTreeDepthRecursion(TreeNode treeNode) { if (treeNode == null) {原创 2020-05-25 18:20:12 · 590 阅读 · 0 评论 -
【leetcode-每日一题】无序数组最大相邻差
解法一:利用计数排序思想利用计数排序的思想,先求出原数组的最大值max与最小值min的区间长度d(d=max-min+1),以及偏移量offset=min。创建一个长度为d的新数组Array。遍历原数组,每遍历一个元素,就把新数组Array对应下标的值+1。例如原数组元素的值为n,则将Array[n-min]的值加1。遍历结束后,Array的一部分元素值变成了1或更高的数值,一部分元素值仍然是0。遍历新数组Array,统计出Array中最大连续出现0值的次数+1,即为相邻元素最大差值。原创 2020-05-24 17:27:38 · 766 阅读 · 1 评论 -
【每日一题-leetcode】最大公约数
结合辗转相除法和更相减损术,在更相减损术的基础上使用移位运算。众所周知,移位运算的性能非常好。对于给出的正整数a和b,不难得到如下的结论。当a和b均为偶数时,gcd(a,b) = 2×gcd(a/2, b/2) = 2×gcd(a>>1,b>>1)。当a为偶数,b为奇数时,gcd(a,b) = gcd(a/2,b) = gcd(a>>1,b)。当a为奇数,b为偶数时,gcd(a,b) = gcd(a,b/2) = gcd(a,b>>1)原创 2020-05-23 13:15:24 · 626 阅读 · 0 评论 -
【每日一题-leetcode】9.回文数
问题描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。解题思路取出后半段数字进行翻转。这里需要注意的一个点就是由于回文数的位数可奇可偶,所以当它的长度是偶数时,它对折过来应该是相等的;当它的长度是奇数时,那么它对折过来后,有一个的长度需要去掉一位数(除以 10 并取整)。具体做法如下:每次进行取余操作 ( %10),取出最低的数字:y = x % 10将最低的数字加到取出数的末尾:revertNum = revertNum * 10 + y每取一原创 2020-05-22 17:58:01 · 498 阅读 · 0 评论 -
【每日一题-leetcode】1.两数之和
问题描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法一:暴力法暴力法很简单,遍历每个元素 x,并查找是否存在一个值与 target - x 相等的目标元素。时间复杂度:O原创 2020-05-22 17:03:50 · 182 阅读 · 0 评论
分享