
剑指offer
文章平均质量分 86
@Peanut
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer 面试题47:礼物的最大值(java)
题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物思路典型的动态规划定义dp数组dp[i][j]代表当前走到格子的(i - 1, j - 1)位原创 2020-12-27 12:17:42 · 511 阅读 · 2 评论 -
剑指offer 面试题46:把数字翻译成字符串(java)
题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”思路(动态规划)翻译时有两种情况可以把字符的每一位单独翻译,即[1, 2, 2, 5, 8]也可以将某些连原创 2020-12-27 12:15:02 · 187 阅读 · 0 评论 -
剑指offer 面试题45:把数组排成最小的数(java)
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例输入: [3,30,34,5,9]输出: "3033459"思路最直接的方法就是暴力法,对数组中的数据进行全排列,然后拼接起来,找出拼接的数字的最小值,时间复杂度是O(n!)考虑更优的方法我们可以设置一个排序规则,数组根据这个规则排序之后能排成一个最小的数字如何制定排序规则呢?比较两个数字m和n时,需要判断m和n哪个应该排在前面m和n能拼接成mn和nm如果mn<nm,按照题目要求原创 2020-12-27 12:12:57 · 340 阅读 · 0 评论 -
剑指offer 面试题44:数字序列中某一位的数字 O(logn) 时间(java)
题目数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。声明四个变量digit, start, count, numdigit 表示数字是几位数,比如1是1位数,12是两位数,321是三位数num 表示十进制数字start 表示位数(1位数,两位数)的起始数(比如1位数的起始位是1,两位数的起始位是10,三位数的起始位是100)c原创 2020-12-19 21:30:46 · 182 阅读 · 1 评论 -
剑指offer 面试题43:1~n整数中1出现的次数 O(logn)时间(java)
题目输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。思路将n分为个位和其他位n = 4 5 6 个位先分析个位出现1的次数:个位出现1的要取决于个位之前的几位,6之前是45,所以1至少会出现45次,因为个位是6,大于1,所以个位上还会出现一次1,总共出现45 + 1 = 46 次1再分析十位因为个位从0~9经过一轮之后(总共变化10次 0,1,2…9),十位才会增加原创 2020-12-19 19:46:09 · 178 阅读 · 1 评论 -
剑指offer 面试题42:连续子数组的最大和(java)
题目输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路这题其实就是求最大子序和方法1(暴力法)枚举起点和终点,时间复杂度O(n^2)此处有一些小优化,如果是负数,那么就不要设为起点或者终点了方法2(动态规划)max_sum(i)代表假设第i个元素被选择的话,那么从最开原创 2020-12-19 15:23:00 · 169 阅读 · 1 评论 -
剑指offer 面试题41:数据流中的中位数(java)
题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。class Media原创 2020-12-19 14:37:12 · 225 阅读 · 3 评论 -
剑指offer 面试题36:二叉搜索树与双向链表(java)
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。题目要求转换后的链表是排序过的,所以想到二叉搜索树的中序遍历是由小到大遍历的二叉搜索树中,左子节点小于父节点,右子节点大于父节点,所以在转换成排序双向链表时,原先指向左子节点的指针对应链表中指向前一个节点的指针,原先指向右子节点的指针对应链表中指向后一个节点的指针由于是循环链表, 设链表头节点 head 和尾节点 tail ,则应构建 head.left = ta原创 2020-11-28 19:02:49 · 219 阅读 · 0 评论 -
剑指offer 面试题35:复杂链表的复制(java)
题目请实现 copyRandomList(Node head) 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null这题刚开始没看懂题意,大概题意就是拷贝出来一个给出的复杂链表,链表中每个节点有两个指针,指向下一个节点和指向任意节点(或者是指向null),所以在拷贝时,不仅要拷贝链表的顺序,还要把链表中每个节点指向的任意节点拷贝过去,拷贝链表的顺序很容易,关键是如何拷贝当前节点指向的任意节点。在这里,原创 2020-11-28 17:56:23 · 187 阅读 · 0 评论 -
剑指offer 面试题32:从上到下打印二叉树(java)
题目: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。思路: 每次打印节点时,如果该节点有子节点,就将子节点放入队列中 每次打印队列的头节点,直到队列中的所有节点都被打印public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x;原创 2020-08-08 23:02:32 · 557 阅读 · 0 评论 -
面试题31:栈的压入、弹出序列(java)
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列, 序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该栈序列的弹出序列。压栈序列为{1,2,3,4,5},弹出序列为{4,5,3,2,1}:压栈序列为{1,2,3,4,5},弹出序列为{4,3,5,1,2}:思路: 判断一个序列是不是栈的弹出序列规律: 如果下一个弹出的数原创 2020-08-07 20:59:33 · 540 阅读 · 0 评论 -
剑指offer 面试题30:包含min函数的栈 (java)
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)思路: 用双栈: 一个数据栈是用来存push到栈里面的数据,另一个栈(辅助栈)是用来存当前栈中的最小值,如果新加入的值比辅助栈中最顶端的值小,那么辅助栈中将这个值push进去,如果新加入的值没有辅助栈中最顶端的值小,那么辅助栈就将自己当前栈中最小值再push进去,保证辅助栈最顶端的值时时刻刻是数据栈中的最小值。代码:Stack<Integer&原创 2020-08-07 20:19:45 · 605 阅读 · 0 评论 -
剑指offer 面试题29:顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下矩阵:则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路: 先判断循环条件,由图可以发现当行数和列数都 > 循环起始点(左上角)* 2时,循环开始。 可以循环之后,就要打印一圈,打印一圈有如下几种情况: 1.向左打印,向左打印适合所有情况。 2.从上向下打印,终止行号要大于起始行号。 3.从右向左打印,除了终止行号要大于起始行号外,还需终止列号原创 2020-08-07 18:16:24 · 568 阅读 · 0 评论 -
剑指offer 面试题26:树的子结构(java)
题目:输入两棵二叉树A和B,判断B是不是A的子结构。思路: 第一步:在树A中找到和树B的根结点的值一样的结点R;实际上就是树的遍历,采用递归的方式遍历。 第二步:在满足第一步的基础上,判断树A中以B为根结点的子树是不是包含和树B一样的结构。 1.如果结点R的值和树B的根结点不同,则以R为根结点的子树和树B肯定不具有相同的结点。 2.如果它们的值相同,则递归地判断它们各自的左右节点的值是不是相同。 递归的终止条件是我们到达了树A或者树B的叶节点。 需要注意的是,每次遍历的原创 2020-08-01 12:49:34 · 493 阅读 · 0 评论 -
剑指offer 面试题27:二叉树的镜像 (java)
**题目:**请完成一个函数,输入一棵二叉树,该函数输出它的镜像。分析: 仔细观察,可以看出,镜像是在原来树的基础上,对每个树的左右子树进行交换位置。先前序遍历(根->左->右)这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶子节点的左、右子节点之后,就得到了树的镜像。代码:public static class BinaryTreeNode{ int m_nValue; BinaryTreeNode m_pLeft原创 2020-08-01 14:57:09 · 522 阅读 · 0 评论 -
剑指offer 面试题28:对称的二叉树(java)
题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。分析: root.left的对称节点是root.right,root.left.left的对称节点是root.right.right。root.left.right的对称节点是root.right.left递归出口: 都为空指针则返回 true 只有一个为空则返回 false 两个指针当前节点值不相等 返回false代码:public static boolean isSymmetri原创 2020-08-03 17:46:42 · 496 阅读 · 0 评论 -
剑指offer 面试题25:合并两个排序的链表(java)
题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。分析: 定义两个指针分别指向两个链表的头节点,比较这两个节点的值,值小的节点就是合并后链表的头节点,然后将指向值小的那个指针指向其下一个节点,继续进行同样的比较,此过程就是一个递归的过程 考虑鲁棒性问题: 当一个链表是空链表,另一个链表不是空链表,合并后的结果就是那个非空链表 如果两个链表都是空链表,那么合并的结果就是一个空链表代码实现:public static class ListNo原创 2020-07-28 18:35:47 · 559 阅读 · 0 评论 -
剑指offer 面试题24:反转链表(java)
题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。分析: 反转后链表的头节点即为原链表的尾结点(m_pNext为null的节点)。 反转的过程中,要定义三个指针,分别指向当前遍历到的节点index,它的前一个节点i以及后一个节点j。因为当在反转时,如果将当前节点的下一个节点指向其前一个节点i,那么就要知道其前一个节点。如果不事先保存其后一个节点,那么当前节点的下一个节点为前一个节点时index.next=i,要进行接下来的反转时,就找不到i原来的下一个节点了,所原创 2020-07-28 17:48:01 · 613 阅读 · 0 评论 -
剑指offer 面试题23:链表中环的入口节点(java)
题目: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路: 1.如何确定一个链表中包含环: 定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个一次走两步如果走的快的指针追上了走的慢的指针,就说明链表包含环。 如果链表中有环 计算环中节点的个数:因为在判断链表中是否有环时,当两个指针相遇时,说明有环,而且两个指针相遇的节点肯定在环中,从当前这个节点再进行移动,边移动边计数,当再次回到这个点时,就得到环中节点的个数。2.如何找到环出原创 2020-07-28 17:13:08 · 429 阅读 · 0 评论 -
剑指offer 面试题22:链表中倒数第k个节点(java)
题目: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯, 本题从1开始计数,即链表的尾节点是倒数第一个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。思路:方法1: 遍历两次链表,第一次遍历链表计算链表的长度,第二次遍历链表找出倒数第k个节点(n-k+1)方法2(改进): 实现遍历一次链表就能输出,定义两个指针,第一个指针从链表头节点开始遍历,向前走k-1步,第二个指针保持不动 从第k步.原创 2020-07-23 01:19:20 · 419 阅读 · 0 评论 -
剑指offer 面试题21 调整数组顺序使奇数位于偶数前面(java)
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:定义两个指针,一个指向数组的首部,一个指向尾部,数组头部指针从前往后,尾部指针从后往前,先从前往后找到偶数,从后往前找到奇数,交换这两个数的位置,当尾指针的位置在头指针前面时,结束循环。 public static void main(String[] args) { int[] arr={1,2,3,4,5}; ReorderOddEv原创 2020-07-22 11:51:46 · 450 阅读 · 0 评论 -
剑指offer 面试题20:表示数值的字符串 (java)
题目: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。分析: 在数值之前可能有一个表示正负的’-‘或者’+’,后面紧跟着若干个0到9的数位表示数值的整数部分。 如果遇到小数点’.’,那么在小数点后面可能会有若干个0到9的数位。 如果遇到’e’或者‘E’,那么后面跟着一个整数,这个整数原创 2020-07-20 20:15:52 · 458 阅读 · 0 评论 -
剑指offer 面试题19: 正则表达式匹配(java)
题目 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”ab*a”均不匹配思路:1.模式中的第二个字符不是’*' 判断字符串和模式中的第一个字符是否匹配 1.如果不匹配,则返回false 2.如果匹配,字符串和模式都后移一个字符,继续进行匹配2.模式中的第二个字原创 2020-07-20 18:16:33 · 588 阅读 · 0 评论 -
剑指offer 面试题18:删除链表结点(java)
题目一:删除链表的节点 给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。思路:1.要删除的结点不是尾结点 (链表中间的结点) 将要删除的结点的下一节点j内容复制到要删除的节点上,再把要删除结点的指针指向j的下一个节点。再删除j2.要删除的结点是头结点 链表中只有一个节点 在删除节点之后还需要把链表头结点设为null。3.要删除的结点是链表的尾结点 要删除的结点没有下一节点,需要从链表头结点开始,顺序遍历得到该节点的前序节点,完成删除操作。 时间复杂原创 2020-07-10 16:45:44 · 481 阅读 · 0 评论 -
剑指offer 面试题17:打印从1到最大的n位数(java)
题目: 输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。分析: 由于没有给n的范围,所以要考虑到大数问题。第一种方法(模拟加法): 在字符串的数字上模拟加法,定义一个长度为n的字符数组,初始化为’0’, 把字符串表达的数字打印出来 定义一个长度为n的数组,每一位表示数字的一位 在数字的最后一位每次加一,加到10就归零,定义一个变量来表示进位,加到10的时候进位的变量为1定义一个判断是否最大的n位数,如果第n位上的数加到1原创 2020-07-07 22:46:21 · 480 阅读 · 0 评论 -
剑指offer 面试题16:数值的整数次方(java)
题目: 实现函数double Power(double base,int exponent),求 base 的 exponent 次方。不得使用库函数,同时不需要考虑大数问题。分析: 1.当指数为正数时,正常求解 2.当指数为负数时,先按-exponent来求, 最后的到的结果进行求倒数。 3.当指数为0时,返回1 4.当底数为0时,并且指数为负数,那么对0求倒数就会出现程序错误,这里直接将此情况返回0. 5.求平方时,为了提高效率,可以先判断指数是奇数还是偶数,如果是偶数,原创 2020-06-10 22:45:22 · 555 阅读 · 0 评论 -
剑指offer 面试题15:二进制中1的个数(java)
题目:请实现一个函数,输入一个整数,输出该二进制表示中1的个数。例如,把9表示成二进制的1001,有2位时1。因此,如果输入9,则该函数输出2。public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); System.out.println(f3(n))原创 2020-06-09 14:57:43 · 450 阅读 · 0 评论 -
剑指offer 面试题14 剪绳子(java)
题目: 给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…k[m]。请问k[0]×k[1]×…×k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18分析:动态规划法: 时间复杂度O(n)2 空间复杂度O(n), 对于长度为n的绳子进行剪切时, 第一刀有n-1种选择,因此f(n)=max(f(i)*f(n-i)), 其中0<i<原创 2020-06-09 13:20:45 · 464 阅读 · 0 评论 -
剑指offer 面试题13:机器人的运动范围(java代码)
题目描述:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。 一个机器人从坐标 [0, 0] 的格子开始移动, 它每次可以向左、右、上、下移动一格(不能移动到方格外), 也不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格 [35, 37] , 因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?分析:用到回溯算法机器人从坐标(0,0)开始移...原创 2020-05-27 20:42:08 · 478 阅读 · 0 评论 -
剑指offer 面试题12:矩阵中的路径 (java代码)
题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。 如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 &n原创 2020-05-26 21:48:49 · 472 阅读 · 0 评论 -
剑指offer 面试题11:旋转数组的最小数字
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,输入{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1分析: 最简单的方法就是从头到尾遍历数组,然后找到最小的元素。这种方法的时间复杂度是O(n);优化: &nbs原创 2020-05-25 13:19:39 · 231 阅读 · 0 评论 -
剑指offer 面试题10:斐波那契数列(java代码)
题目一:求斐波那契数列的第n项写一个函数,输入n,求斐波那契(fibonacci)数列的第n项。斐波那契数列的定义如下:0 n=0f(n)= 1 n=1f(n-1)+f(n-2) n>1public class A_10斐波那契数列 { public static void main(String[] args) { // System.out.println(Fibonacci原创 2020-05-23 21:13:12 · 221 阅读 · 0 评论 -
剑指offer 面试题9:用两个栈实现队列(java代码)
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。template<typename T> class CQqueue{ public: CQueue(void); ~CQueue(void); void appendTail(const T & node); T deleteHead(); private: stack<T> stack原创 2020-05-22 09:48:54 · 276 阅读 · 0 评论 -
剑指offer 面试题7:重构二叉树(Java代码)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列 {1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重构二叉树并输出它的头结点。二叉树节点的定义如下:struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;}分原创 2020-05-21 21:17:16 · 188 阅读 · 2 评论 -
剑指offer 面试题8:二叉树的下一个节点(Java代码)
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点? 树中的节点除了有两个分别指向左右子节点的指针,还有一个指向父节点的指针。class treeNode{ char val; treeNode left_Tree=null; treeNode right_Tree=null; treeNode parent_Tree=null; treeNode(char val){ this.val=val; }}public原创 2020-05-20 20:40:02 · 190 阅读 · 0 评论 -
剑指offer 面试题6:从尾到头打印链表(java代码)
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。链表结点定义如下: struct ListNode{ int m_nkey; ListNode* m_pNext; }要求是从头到尾遍历,但是要从尾到头打印,就是先进后出。那么可以想到的是两种方案第一种是用栈第二种是用递归class ListNode{ int value; ListNode next=null; ListNode(原创 2020-05-17 19:49:03 · 188 阅读 · 0 评论 -
剑指offer 面试题5 替换空格(Java代码)
面试题5:替换空格题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如,输入"We are happy.",则输出"We%20are%20happy"//usedLength是字符串string的实际长度 不是字符数组的纵容量 public static int replaceBlank(char[] string, int usedLength) { //判断输入是否合法 if(string==null||string.length<=原创 2020-05-14 21:42:46 · 186 阅读 · 0 评论 -
面试题4:二维数组中的查找(Java实现)
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 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。给定 targe原创 2020-05-14 13:22:20 · 300 阅读 · 0 评论 -
剑指offer 面试题3 题目二(Java代码)
面试题3:数组中重复的数字题目二:不修改数组找出重复的数字在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。解决方案1:题目要求不能修改输入的数组,可以创建一个长度为n+1的辅助数组,然后逐一把原数组的每个数字复制到辅助数组。如果原数组中被复制的数字是m,那么就把它复制到辅助数组下标为m的位置。比较简单,但是原创 2020-05-13 01:21:52 · 213 阅读 · 0 评论 -
剑指offer 面试题3 题目一(Java代码)
面试题3:数组中重复的数字题目一:找出数组中重复的数字。在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。Java代码: static int n; static int[] a; static int ans; public static void main原创 2020-05-09 13:59:02 · 183 阅读 · 0 评论