这些大厂笔试题 你都见识(被无情鞭挞)过了吗?—— 瓜子二手车篇
admin
2024-02-24 10:39:07
0

题目链接:

瓜子二手车2019秋招 – 截取部分


一.递增子序列

题目描述:

判断一个无序数组中是否存在长度为3的递增子序列。(不要求连续)(满足O(n)的时间复杂度和O(1)的空间复杂度。)

输入描述:

第一行一个正整数 1 <= n <= 100000
第二行n个整数a1,a2,…,an,(1<=ai<=1e9)

输出描述:

如果存在,输出"true",否则输出"false"。(不含引号)。

示例1:

输入:
5
12 8 36 9 20
输出:
true

个人总结:

其实我这么写有点儿无语的,但是他居然能过,牛客测试用例太少了,比如你输入5个数字 3 4 1 5 2,长度为3的递增子序列为 3 4 5,但是他会给你返回false。

代码实现:

import java.util.*;public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[i] = sc.nextInt();}int first = arr[0];int second = Integer.MAX_VALUE;for(int i = 1; i < n; i++) {if (arr[i] < first) {first = arr[i];second = Integer.MAX_VALUE;} else if (arr[i] > first && arr[i] < second) {second = arr[i];} else if (arr[i] > first && arr[i] > second) {System.out.println(true);return;}}System.out.println(false);}
}

二.硬币划分

题目描述:

有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱?

输入描述:

输入整数n.(1<=n<=100000)

输出描述:

输出组合数,答案对1e9+7取模。

示例1:

输入:
13
输出:
16

个人总结:

动态规划

代码实现:

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int mod = 1000000007;int[] coins = {1, 2, 5, 10};//表示i分钱的硬币组合int[] dp = new int[n + 1];dp[0] = 1;//循环统计 使用一种~使用四种硬币可以凑成i分钱的组合总和for (int coin : coins) {for (int i = coin; i <= n; i++) {dp[i] = (dp[i] + dp[i - coin]) % mod;}}System.out.println(dp[n]);}
}

三.合并二叉树

题目描述:

已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。合并二叉树

输入描述:

第一行输入整数n,m。(分别表示树1和树2的节点数,1<=n,m<=100)
接下来n行,第i行三个整数l,r,v, (0<=l,r<=n , 0<=v<=100) ,表示第一棵树的第i个结点的左儿子编号,右儿子编号和权值。
接下来m行,第i行三个整数l,r,v, (0<=l,r<=n , 0<=v<=100) ,表示第二棵树的第i个结点的左儿子编号,右儿子编号和权值。
(对于左右儿子,如果编号为0表示空。保证如果儿子不为空,则儿子编号大于父亲编号。)

输出描述:

输出合并后树按层遍历的各结点权值,相邻权值之间以一个空格相间。

示例1:

输入:
输入例子:
4 5
2 3 1
4 0 3
0 0 2
0 0 5
2 3 2
0 4 1
0 5 3
0 0 4
0 0 7
输出:
3 4 5 5 4 7

个人思路:

难点在于如何通过输入构建二叉树。

代码实现:

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] treeNode1 = new int[3 * n];int[] treeNode2 = new int[3 * m];for (int i = 0; i < treeNode1.length; i++) {treeNode1[i] = sc.nextInt();}for (int i = 0; i < treeNode2.length; i++) {treeNode2[i] = sc.nextInt();}TreeNode r1 = TreeNode.creatTree(treeNode1);TreeNode r2 = TreeNode.creatTree(treeNode2);TreeNode root = merge(r1, r2);//层序遍历Deque deque = new LinkedList<>();if (root != null) {deque.offer(root);}while (!deque.isEmpty()) {int size = deque.size();while (size-- != 0) {TreeNode cur = deque.poll();System.out.print(cur.val + " ");if (cur.left != null) {deque.offer(cur.left);}if (cur.right != null) {deque.offer(cur.right);}}}}public static TreeNode merge(TreeNode root1, TreeNode root2) {if (root1 == null && root2 == null) {return null;}if (root1 == null) {return root2;}if (root2 == null) {return root1;}root1.val += root2.val;root1.left = merge(root1.left, root2.left);root1.right = merge(root1.right, root2.right);return root1;}
}class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val = val;}public static TreeNode creatTree(int[] treeArr) {//储存编号和结点的映射关系Map map = new HashMap<>();TreeNode head = new TreeNode(0);map.put(1, head);TreeNode root = null;//k为结点编号for (int i = 0, k = 1; i < treeArr.length; i += 3, k++) {int left = treeArr[i];int right = treeArr[i + 1];int val = treeArr[i + 2];//获取编号对应的结点if (map.containsKey(k)) {root = map.get(k);}root.val = val;//判断左右孩子是否为空 为空则赋值null 不为空则加入映射if (left == 0) {root.left = null;} else {//连接结点并加入映射root.left = new TreeNode(0);map.put(left, root.left);}if (right == 0) {root.right = null;} else {root.right = new TreeNode(0);map.put(right, root.right);}}return head;}
}

相关内容

热门资讯

手机在安装安卓系统,从解锁Bo... 手机在安装安卓系统:你的专属升级之旅想象你的手机就像一辆老式老爷车,虽然坚固耐用,但已经跟不上时代的...
安卓怎样释放系统空间,高效清理... 手机里的空间总是不够用,是不是你也和我一样,时不时地收到“存储空间不足”的提醒?别急,今天就来教你几...
联想安卓系统广告关闭,享受清爽... 亲爱的手机控们,你们是不是也和我一样,对安卓手机上的广告感到无比烦恼呢?那些无处不在的广告,不仅占用...
系统映像安卓系统x86,PC端... 哇,你有没有想过,在电脑上也能畅玩安卓游戏,体验安卓应用呢?没错,这就是今天我要跟你分享的神奇之旅—...
安卓系统屏幕下端按钮,功能解析... 亲爱的手机控们,你是否曾为安卓系统屏幕下端的那些小按钮而感到好奇呢?它们看似平凡,却隐藏着大大的秘密...
安卓系统如何调头像,Andro... 亲爱的手机控们,你们有没有想过,手机里的头像可是我们个性的小标志呢!今天,就让我来带你一起探索如何在...
安卓系统怎么把照片,Andro... 你有没有想过,手机里的照片怎么才能变得井井有条呢?尤其是安卓系统,操作起来是不是有点小复杂?别急,今...
安卓360强刷系统,安卓360... 你那安卓手机是不是已经卡到不行了?别急,今天就来教你一招——安卓360强刷系统!这可不是什么高深莫测...
什么系统安卓手机通用,基于通用... 你有没有想过,为什么你的安卓手机不能像电脑那样,随心所欲地安装各种版本的安卓系统呢?今天,就让我带你...
windows远程安卓系统下载... 哇,你有没有想过,在Windows电脑上也能轻松使用安卓系统呢?没错,这就是今天我要跟你分享的神奇之...
安卓系统手机刷任务,步骤、技巧... 亲爱的手机控们,你们是不是也和我一样,对安卓系统手机刷任务充满了好奇和期待呢?想象你的手机就像一辆老...
逍客安卓系统usb,“逍客安卓... 亲爱的车主朋友们,你们有没有想过,你的逍客安卓系统USB接口,竟然能玩出这么多花样?今天,就让我带你...
安卓系统导航不带CD,拥抱智能... 你有没有发现,现在很多车里的导航系统都变成了安卓系统,而且它们好像都不带CD播放功能了呢?这可让那些...
安卓系统和iOS系统运行原理,... 你有没有想过,为什么你的手机可以轻松地打开各种应用,而你的朋友却只能用那几个固定的?这背后,其实是安...
安卓清除系统软件,安卓系统软件... 亲爱的手机控们,你们是不是也和我一样,对那些安卓手机里自带的系统软件感到烦恼呢?它们不仅占用了宝贵的...
安卓卸载系统应用app,无需R... 手机里的系统应用,有时候就像那些黏人的小跟班,总在你最不想它们出现的时候跳出来。今天,就让我来带你一...
安卓系统实现闪信,安卓系统闪信... 亲爱的安卓手机用户们,你们有没有想过,在信息爆炸的时代,如何让你的信息脱颖而出,直接跳进对方的视线里...
盒子怎么刷安卓系统,盒子刷安卓... 亲爱的读者朋友们,你是不是也和我一样,家里的安卓盒子用久了,总觉得有点卡,想要给它来个焕然一新的变身...
安卓系统怎么刷锤子系统,操作指... 你有没有想过给你的安卓手机换换口味?别看它现在运行得风生水起,偶尔来点新鲜感也是不错的。今天,就让我...
物本 安卓系统盒,引领智能生活... 亲爱的读者们,你是否曾想过,在繁忙的生活中,如何让科技为你的日常带来一丝轻松与便捷?今天,我要给大家...