牛客网JAVA简单编程题
罗昌凯
这个作者很懒,什么都没留下…
展开
-
寻找查找二叉树的第K小节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:由于是二叉搜索树(二叉查找树),故中序遍历该树,得到的是有序的。所以在遍历的过程中返回第K个节点就可以了。采用非递归中序遍历:import java.util.Stack;public class Solution { TreeNode KthNode(TreeNode pRoot, int k) {.原创 2021-03-04 22:16:53 · 870 阅读 · 1 评论 -
构建乘积数组
题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M.原创 2021-03-04 21:20:16 · 71 阅读 · 1 评论 -
不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:用异或、与、进位操作实现加法public class Solution { public int Add(int num1,int num2) { int sum=num1^num2; int carry=(num1&num2)<<1; num..原创 2021-03-04 16:04:23 · 64 阅读 · 1 评论 -
判断二叉树是否是平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:在求二叉树高度的过程中,判断一下左右子树的高度差是否大于1.public class Solution { .原创 2021-03-04 15:19:22 · 437 阅读 · 1 评论 -
求二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M方法一:层次遍历import java.util.Queue;import java.util.LinkedList;public class Solution { public int TreeDepth(TreeNode root) { .原创 2021-03-04 14:46:28 · 128 阅读 · 1 评论 -
第一个只出现一次的字符位置
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:先遍历一次,用Hashmap记录每个字符的出现次数。然后再遍历一次,找到第一个出现一次的字符import java.util.HashMap;public class Solution { publi.原创 2021-03-04 14:18:55 · 71 阅读 · 1 评论 -
连续子数组的最大和
题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:一般遇到求最优解的问题,都使用动态规划。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达.原创 2021-03-04 10:52:14 · 49 阅读 · 1 评论 -
数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:一个数组中的众数超过数组长度的一半。result记录第一个数,count=1.从前开始遍历,遇到不相等的数,count--,遇到相等的数count++。当count=0时,result.原创 2021-03-03 23:52:47 · 62 阅读 · 1 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++...原创 2021-03-03 22:02:43 · 45 阅读 · 1 评论 -
变态台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:当阶梯数为1,2,3,4,5时,可以自己手动算一下有多少种跳法,结果为1,2,4,8,16。故为2的(n-1)次幂public class Solution { public int jumpFloorII(int target) { return su.原创 2021-03-03 21:30:01 · 73 阅读 · 1 评论 -
输出旋转数组的最小元素
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 64M,其他语言128M思路:从前往后找,找到第一个比array[0]小的数,即为所求。public class Solution { public int minNumberInRotateArray(int [] arr.原创 2021-03-03 21:17:04 · 65 阅读 · 1 评论 -
返回子数组的最大累加和
题目描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.题目保证没有全为负数的数据[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 256M,其他语言512M思路:题目很简单。先用sum保存第一个值,然后循环遍历数组,当sum+arr[i]<sum时,则跳过.原创 2021-03-03 20:59:57 · 138 阅读 · 1 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M一开始的思路:用stack1做push操作。当pop操作时,先将stack2中元素清空,然后将stack1中的数据全部放入stack2中,然后取出stack2栈顶元素,最后把stack2中剩下的元素又放回stack1中,代码如下:public class Solution { Stack<Integ.原创 2021-03-03 15:48:07 · 89 阅读 · 2 评论 -
合并链表
题目描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128Mpublic class Solution { /** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ public ListNode .原创 2021-03-03 15:04:49 · 110 阅读 · 2 评论 -
判断给定的链表中是否有环
题目描述判断给定的链表中是否有环。如果有环则返回true,否则返回false。你能给出空间复杂度O(1)的解法么?时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路:用两个指针指向头节点,遍历的时候,一个指针一次走两步,另外一个指针一次走一步。如果没有环,两指针不会相遇,否则会相遇。该问题比较简单,但难点在于怎样把时间控制在2秒内。多一个判断句,就会超出时间限制。所以要尽量减少判断语句,同时满足所有测试用例。public class So.原创 2021-03-02 15:55:33 · 180 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M从前往后遍历,将每一个结点采用倒插法建立新链表就可以了。public class Solution { public ListNode ReverseList(ListNode head) { if(head==null){ return null; } else{ ListN.原创 2021-03-02 20:33:31 · 51 阅读 · 0 评论 -
判断二叉树是否对称
题目描述给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的 1 / \ 2 2/ \ / \3 4 4 3下面这棵二叉树不对称。 1 / \ 2 2 \ \ 3 3时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:由于要求树有对称性,也就是以根节点为中心,两边对称,所以比较的是同一根节点的左右子树是否相同。即左子树的...原创 2021-03-02 22:57:13 · 342 阅读 · 0 评论 -
返回等于目标值的数
题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M解题思路:用两层循环即可,第一层循环确定..原创 2021-03-03 10:40:08 · 86 阅读 · 0 评论