查看: 1062|回复: 7
收起左侧

🐶家 店面- 挂经

|只看干货
匿名用户-ADE  2022-7-7 02:54:05 来自APP |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎

2022(4-6月) 码农类General 本科 全职@Google - 网上海投 - 技术电面  | 😃 Positive 🙂 EasyFail | 其他

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
题目是 求水位低于seaLevel 的数组

给定一组表示地形高度的正整数(在二维中,比如《超级马里奥》)和一个表示平坦海平面的整数,返回一个表示每个独特水体体积的整数容器。

input:
int[] arr = {1, 5, 1, 3, 4, 3, 1, 2, 7, 5, 6};
int seaLevel = 4;

output: [3, 3,7]

如果有高于海平面的跳过,output 是 4-1 =3, 7是后面因为中间没有海平面挡着 就会将低于海平面的相加。大概是
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
:00):
output: [3, 4 ,6 ]

不好意思,地里的大哥们



谢谢 如果可以麻烦加个米 帮帮忙

评分

参与人数 3大米 +7 收起 理由
清道神君 + 5
neverlate + 1 很有用的信息!
uathena + 1 给你点个赞!

查看全部评分


上一篇:c3 ai 电面
下一篇:Arkuna Capital Junior C++ developer full time 2023 OA
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   67% (2199)
 
 
32% (1046)    👎
这一题好像很简单。如果高度是和sealeavel 相等,算切断了容器么?好像只是用这个level是loop,每个减。求presum,一旦遇到了sealevel or 以上的,就存数字,presum = 0 ,继续。

我理解对的么?
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   85% (532)
 
 
14% (87)    👎
楼主,你这题完全没看懂,能否大概解释一下?谢谢
input:
int[] arr = {1, 5, 1, 3, 4, 3, 1, 2, 7, 5, 6};
int seaLevel = 4;
我的理解是海平面是4,那
output: [3,0,3,1,0,1,3,2,0,0,0]
那连在一起的容器算同一个,输出应该是 3 4 6
为什么是 3 3 7呢?
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎
neverlate 发表于 2022-07-06 14:03:59
楼主,你这题完全没看懂,能否大概解释一下?谢谢
input:
int arr = ;
就是如果数组里面有大于海平面的不会加到返回值里 如果是3, 5, 3就会返回[1,1] 如果没有大于海平面的数挡的话就会相加 返回总值到新的数组。不知道有没有说明白 我等级低不可以发图 如果不明白请再问 谢谢

补充内容 (2022-07-07 06:00 +08:00):
如果是你这个数组就会返回[31], 如果是[3,5,3,1,0,1,3,2,0,0] 返回[1,1,25] 大于海平面就会skip 然后put whatever it had into the new array list,reset the volume = 0 keep going

补充内容 (2022-07-07 06:01 +08:00):
抱歉应该是[1,26]

补充内容 (2022-07-07 06:05 +08:00):
[3,5,3,1,0,1,3,2,0,0] 返回 [1,22]

很烦 之前的都不可以编辑……
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎
neverlate 发表于 2022-07-06 14:03:59
楼主,你这题完全没看懂,能否大概解释一下?谢谢
input:
int arr = ;
对对 你对 是3,4,,6   我可能理解题目错了 我找到有个帖子和我考的一样 你可以到这里看看这个https://stackoverflow.com/questi...ing-over-top-arrays
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   92% (908)
 
 
7% (69)    👎
neverlate 发表于 2022-7-6 14:03
楼主,你这题完全没看懂,能否大概解释一下?谢谢
input:
int[] arr = {1, 5, 1, 3, 4, 3, 1, 2, 7, 5,  ...

你说得的对,下面是代码

用start标记记录的起始点

当前数字低于海平面时标记开始并累加结果
当前正在计算时并且到了最后一个点或者下一个点高于等于海平面,则开始技术结果加到res中,并标记start为false,reset vol = 0
  1. public List<Integer> water(int[] heights, int seaLevel) {
  2.         List<Integer> res = new ArrayList<>();
  3.        if (heights == null || heights.length == 0) {
  4.            return res;
  5.        }

  6.        boolean start = false;
  7.        int vol = 0;
  8.        for (int i = 0; i < heights.length; i++) {
  9.            if (heights[i] < seaLevel) {
  10.                start = true;
  11.                vol += seaLevel - heights[i];
  12.            }
  13.            if (start && (i == heights.length - 1 || heights[i + 1] >= seaLevel)) {
  14.               res.add(vol);
  15.               start = false;
  16.               vol = 0;
  17.            }
  18.        }
  19.        return res;
  20.     }
复制代码

评分

参与人数 1大米 +1 收起 理由
neverlate + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   85% (532)
 
 
14% (87)    👎
多谢楼上各位回复,已米。
我的代码:
  1. def getWaters(ary, sealevel):
  2.     ans = []
  3.     pre = 0
  4.     for a in ary:
  5.         if a < sealevel:
  6.             pre+=4-a
  7.         elif pre > 0:
  8.             ans.append(pre)
  9.             pre = 0
  10.     # incase tail numbers is under sealevel
  11.     if pre > 0:
  12.         ans.append(pre)
  13.     return ans
复制代码
回复

使用道具 举报

本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (18)
 
 
0% (0)    👎
最笨最直观的方法:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class levelbelowsea {

    public static int[] below(int[] heights, int seaLevel) {
        int n = heights.length;
        int[] output = new int[n]; //用一个相同大小的数组过渡一下。
        for (int i = 0; i < n; ++i) {
            int temp = seaLevel - heights[i];
            if (temp < 0) {
                temp = 0;
            }
            output[i] = temp;
        }

        List<Integer> list = new ArrayList<>(); //用list临时装答案。
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            if (output[i] > 0) {
                ans = ans + output[i];
            } else {
                if (ans > 0) {
                    list.add(ans);
                }
                ans = 0;
            }
        }

        int ls = list.size();
        int[] res = new int[ls]; //把list装回数组,返回答案。
        for (int i = 0; i < ls; ++i) {
            res[i] = list.get(i);
        }

        return res;
    }

    public static void main(String[] args) {
        int[] a = {1,5,1,3,4,3,1,2,7,5,6};
        int level = 4;
        System.out.println(Arrays.toString(below(a, level)));
        // [3, 4, 6]
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表