算法
nonbioclock
这个作者很懒,什么都没留下…
展开
-
剑指Offer31
剑指Offer第三十一天数学(困难)题1:剪绳子II给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。剪绳子的题目,原创 2021-10-07 23:15:42 · 127 阅读 · 0 评论 -
剑指Offer30
剑指Offer第三十天分治算法(困难)题1:打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。力扣中该题的返回类型是int[],这就将数据的范围固定为32位内了但是剑指Offer原题中,返回类型为String,主要用于考察大数问题//leetcode返回int[]解法class Solution{ public int[] printNumbers(int n){原创 2021-10-07 23:14:22 · 147 阅读 · 0 评论 -
剑指Offer29
剑指Offer第二十九天动态规划(困难)题1:正则表达式匹配请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。。。看了题解都想了好久。。感觉好难而且很高频。。class Solution { public boolean isMatch(St原创 2021-10-07 23:13:08 · 145 阅读 · 0 评论 -
剑指Offer28
剑指Offer第二十八天搜索与回溯算法(困难)序列化二叉树居然是困难?。。题1:序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。原创 2021-10-01 20:53:55 · 90 阅读 · 0 评论 -
剑指Offer27
剑指Offer第二十七天栈与队列(困难)今天又是充满希望的一天 > ~ <题1:滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。看题解的。。呜呜,想到用大顶堆了,但是写不出来class Solution { //参考题解的,我自己写不出来,理清思路写下的拙见 public int[] maxSlidingWindow(int[] nums, int k) { int n = nums原创 2021-09-30 23:37:41 · 83 阅读 · 0 评论 -
剑指Offer26
剑指Offer第二十六天字符串(中等)题1:表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整原创 2021-09-29 22:43:33 · 140 阅读 · 0 评论 -
剑指Offer25
剑指Offer第二十五天模拟(中等)题1:顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。class Solution { public int[] spiralOrder(int[][] matrix) { //定义行 int row = matrix.length; if(row == 0){ return new int[0]; } //定义列原创 2021-09-28 23:13:42 · 88 阅读 · 0 评论 -
剑指Offer24
剑指Offer第二十四天数学(中等)题1:剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。class Solution { public int cuttingRope(int n) { //设d原创 2021-09-27 23:01:28 · 74 阅读 · 0 评论 -
剑指Offer23
剑指Offer第二十三天数学(简单)题1:数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); int mid = (nums.length-1)>>1; return nums[原创 2021-09-26 21:51:56 · 62 阅读 · 0 评论 -
剑指Offer22
剑指Offer第二十二天位运算(中等)题1:数组中数字出现的次数I一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。class Solution { public int[] singleNumbers(int[] nums) { //异或很容易想到,分组就很难想到了,我记得之前应该是做过这道题,结果还是不会做,想不到分组的方法。 //分组的原理:原创 2021-09-25 21:46:51 · 64 阅读 · 0 评论 -
剑指Offer21
剑指Offer第二十一天位运算(简单)题1:二进制中1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。public class Solution { public int hammingWeight(int n) { int sum = 0; for(int i = 0 ; i < 32; i++){ if((n & (1 &l原创 2021-09-24 23:15:18 · 103 阅读 · 0 评论 -
剑指Offer20
剑指Offer第二十天分治算法(中等)题1:重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val原创 2021-09-23 23:41:07 · 100 阅读 · 0 评论 -
剑指Offer19
剑指Offer第十九天回溯算法(中等)题1:求1+2+…+n求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。参考题解:https://leetcode-cn.com/problems/qiu-12n-lcof/solution/mian-shi-ti-64-qiu-1-2-nluo-ji-fu-duan-lu-qing-xi-/虽然我觉得这种题没啥价值,但是确实不会,也学到了,学到了就有价值原创 2021-09-22 22:44:26 · 80 阅读 · 0 评论 -
剑指Offer18
剑指Offer第十八天回溯算法(中等)题1:二叉数的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。class Solution { //回溯算法,把要返回的值定义在公共区域 int max = 0; public int maxDepth(TreeNode root) { helper(root, 0); return max; } /原创 2021-09-21 14:12:01 · 83 阅读 · 0 评论 -
剑指Offer17
剑指Offer第十七天大堆顶排序(中等)题1:最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。class Solution { public int[] getLeastNumbers(int[] arr, int k) { //用Arrays.sort()固然简单,但是这题的核心还是要手写快排吧。 if(k==0 || arr.length == 0)原创 2021-09-20 23:46:32 · 68 阅读 · 0 评论 -
剑指Offer16
剑指Offer第十六天排序(简单)题1:把数组排成最小的数输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。class Solution { public String minNumber(int[] nums) { String[] arr = new String[nums.length]; for (int i = 0; i < nums.length; i++) { ar原创 2021-09-19 14:49:38 · 100 阅读 · 0 评论 -
剑指Offer15
剑指Offer第十五天回溯算法(中等)题1:二叉树中和为某一值的路径输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。在这里插入图片描述class Solution { //回溯算法,可以把要返回的属性放在公共可调用的位置,往往回溯的dfs方法需要去更改他的值 List<List<Integer>> res = new ArrayList<>();原创 2021-09-18 23:11:25 · 68 阅读 · 0 评论 -
剑指Offer14
剑指Offer第十四天回溯算法(中等)题1:矩阵中的路径输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。class Solut原创 2021-09-17 20:28:59 · 57 阅读 · 0 评论 -
剑指Offer13
剑指Offer第十三天双指针(简单)题1:调整数组顺序使奇数位于偶数位前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。class Solution { public int[] exchange(int[] nums) { int left = 0; int right = nums.length-1; while(left < right){原创 2021-09-16 22:39:36 · 75 阅读 · 0 评论 -
剑指Offer12
剑指Offer第十二天链表(简单)感觉链表还是有点生疏啊题1:合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null && l2== null){ return null; } ListN原创 2021-09-15 22:28:10 · 69 阅读 · 0 评论 -
剑指Offer11
剑指Offer第十一天双指针(简单)题1:删除链表的节点给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。class Solution { public ListNode deleteNode(ListNode head, int val) { ListNode dummyHead = new ListNode(-1); dummyHead.next = head; ListNode cur = dummyHead;原创 2021-09-14 20:48:58 · 54 阅读 · 0 评论 -
剑指Offer10
剑指Offer第十天动态规划(中等)题1:把数字翻译成字符窜给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。class Solution { public int translateNum(int num) { //将int类型转为String类型 String str =原创 2021-09-13 23:07:55 · 59 阅读 · 0 评论 -
剑指Offer9
剑指Offer第九天动态规划(中等)题1:连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。class Solution { public int maxSubArray(int[] nums) { int maxSum = Integer.MIN_VALUE; int cur = 0; for(int num : nums){ c原创 2021-09-12 01:08:43 · 73 阅读 · 0 评论 -
剑指Offer8
剑指Offer第八天动态规划,这天都是很简单的题。。题1:斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。cl原创 2021-09-11 15:26:38 · 59 阅读 · 0 评论 -
剑指Offer7
剑指Offer第七天题1:树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。看的懂,但是还是不理解。。(如果我碰到这种题,我会写的出来吗。。)参考题解写的。。https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/solution/mian-shi-ti-26-shu-de-zi-jie-gou-xian-xu-bian-li-p//*原创 2021-09-11 00:01:24 · 81 阅读 · 0 评论 -
剑指offer1
剑指Offer第一天题1:用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )实例看不懂没关系,直接代码走起:class CQueue { //首先如何用两个栈构成队列?这显然要对这两种数据类型的结构有基本了解 //队列是先入先出(FIFO),而栈是后入先出(LIFO) //所以如果将原创 2021-09-04 14:40:51 · 63 阅读 · 0 评论 -
剑指Offer6
剑指Offer第六天很有意义的一天,学到了很多不懂的东西!题1:从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。class Solution { public int[] levelOrder(TreeNode root) { //层序遍历 if(root == null){return new int[0];} //用队列来判断是否节点是否到头(因为需要经常入队出队,所以用LinkedList)原创 2021-09-09 23:49:22 · 72 阅读 · 0 评论 -
剑指Offer5
剑指Offer第五天题1:二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if(matrix == null || matrix.length == 0 |原创 2021-09-08 23:08:28 · 70 阅读 · 0 评论 -
剑指Offer4
剑指Offer第四天题1:数组中重复数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<>();原创 2021-09-07 23:33:37 · 64 阅读 · 0 评论 -
剑指Offer3
剑指Offer第三天都很简单,没什么好说的。。题1:替换空格请实现一个函数,把字符串 s 中的每个空格替成"%20"。s.charAt()比较用==不用equals,因为是转成char类型的class Solution { public String replaceSpace(String s) { StringBuilder sb = new StringBuilder(); for(int i = 0; i < s.length(); i++原创 2021-09-06 22:55:42 · 103 阅读 · 0 评论 -
剑指Offer2
剑指Offer第二天题1:从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。简单题,一遍过,听到从尾到头,就想到要用栈来解决class Solution { public int[] reversePrint(ListNode head) { ListNode cur = head; Stack<Integer> stack = new Stack<>(); while(cur原创 2021-09-05 23:45:08 · 61 阅读 · 0 评论