上海链家java面试题_链家2018春招Java工程师编程题题解

Light

题目描述

在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮。现在问你,使用这n组开关,最多能够使得多少个灯泡点亮呢?

输入

第一行一个n,表示有n组开关。接下来n行,每行第一个整数为k,表示这个开关控制k个灯泡,接下来k个整数,表示控制的灯泡序号。

满足:1<=n<=1000 、1<=k<=1000 、序号是在int范围内正整数。

输出

输出最多多少个灯泡点亮。

样例输入

3

1 1

1 2

2 1 2

样例输出

2

思路

这道题是一个去重的问题,即多个开关可能按下都使同一个开关亮,那么可以利用HashSet去重。

代码实现

package lianjia.demo1;

import java.util.HashSet;

import java.util.Scanner;

/**

* 题目描述:

* 在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮。

* 现在问你,使用这n组开关,最多能够使得多少个灯泡点亮呢?

* 输入

* 第一行一个n,表示有n组开关。

* 接下来n行,每行第一个整数为k,表示这个开关控制k个灯泡,接下来k个整数,表示控制的灯泡序号。

* 满足:

* 1<=n<=1000

* 1<=k<=1000

* 序号是在int范围内正整数。

* 输出

* 输出最多多少个灯泡点亮。

*/

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int k;

int x;

HashSet set = new HashSet<>();

for (int i = 0; i < n; i++) {

k = sc.nextInt();

for (int j = 0; j < k; j++) {

x = sc.nextInt();

set.add(x);

}

}

System.out.println(set.size());

}

}

triangle

题目描述

在迷迷糊糊的大草原上,小红捡到了n根木棍,第i根木棍的长度为i,小红现在很开心。她想选出其中的三根木棍组成美丽的三角形。但是小明想捉弄小红,想去掉一些木棍,使得小红任意选三根木棍都不能组成三角形。请问小明最少去掉多少根木棍呢?

输入

本题包含若干组测试数据。对于每一组测试数据。第一行一个n,表示木棍的数量。满足 1<=n<=100000

输出

输出最少数量

样例输入

4

样例输出

1

思路

如果两边和大于第三边,那么要去掉的木棍数加1,否则都加1,继续判断

代码实现

package lianjia.demo2;

import java.util.Scanner;

/**

* 题目描述:

* 在迷迷糊糊的大草原上,小红捡到了n根木棍,第i根木棍的长度为i,小红现在很开心。

* 她想选出其中的三根木棍组成美丽的三角形。

* 但是小明想捉弄小红,想去掉一些木棍,使得小红任意选三根木棍都不能组成三角形。

* 请问小明最少去掉多少根木棍呢?

* 输入

* 本题包含若干组测试数据。

* 对于每一组测试数据。

* 第一行一个n,表示木棍的数量。

* 满足 1<=n<=100000

* 输出

* 输出最少数量

*/

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int i, n;

int count = 0;

int a = 2;

int b = 3;

while (sc.hasNext()) {

n = sc.nextInt();

for (i = 4; i <= n; i++) {

if (a + b > i) {

count++;

} else {

a = b;

b = i;

}

}

System.out.println(count);

count = 0;

a = 2;

b = 3;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值