楼主: 忆梦前尘
跳转到指定楼层
上一主题 下一主题
收起左侧

走吧,去血洗Indeed

   
🔗
2Brown1White 2021-6-12 20:07:08 | 只看该作者
全局:
楼主请问python validation那题,为什么用stack复杂度会优于brute force呢?我的brute force思路是用个list存,然后每一次来新的line跟preLine做比较,我觉的复杂度跟stack一样 都是O(N) 吧,这是我不用stack和用stack的代码:
  1. private static boolean validate(String[] lines) {
  2.                 List<String> list = new ArrayList<String>();
  3.                 for(String line : lines) {
  4.                         int tab = getTab(line);
  5.                         if(list.size() == 0 && tab != 0) {
  6.                                 System.out.println(line);
  7.                                 return false;
  8.                         }
  9.                        
  10.                         if(tab == 0 && list.size() == 0) {
  11.                                 list.add(line);
  12.                         }else {
  13.                                 String preLine = list.get(list.size() - 1);
  14.                                 int preTab = getTab(preLine);

  15.                                 if (isControl(preLine)) {
  16.                                         if (tab != preTab + 1) {
  17.                                                 System.out.println(line);
  18.                                                 return false;
  19.                                         } else {
  20.                                                 list.add(line);
  21.                                         }
  22.                                 } else {
  23.                                         if (tab > preTab) {
  24.                                                 System.out.println(line);
  25.                                                 return false;
  26.                                         } else {
  27.                                                 list.add(line);
  28.                                         }
  29.                                 }
  30.                         }
  31.                 }

  32.                 return true;
  33.         }

复制代码

  1. public static boolean validateStack(String[] lines){
  2.         //就用stack来存之前的line就行
  3.         Stack<String> stack = new Stack<>();
  4.                 for (String line : lines) {
  5.                         int tab = getTab(line);
  6.                        
  7.                         if (stack.isEmpty()) {// 先检查是不是第一行
  8.                                 if (tab != 0) {
  9.                                         System.out.println(line);
  10.                                         return false;
  11.                                 }
  12.                         } else if (isControl(stack.peek())) {// 再检查上一行是不是control statement
  13.                                 if (getTab(stack.peek()) + 1 != tab) {
  14.                                         System.out.println(line);
  15.                                         return false;
  16.                                 }
  17.                         } else {
  18.                                 while (!stack.isEmpty() && getTab(stack.peek()) > tab) {
  19.                                         stack.pop();
  20.                                 }
  21.                                 if (getTab(stack.peek()) != tab) {
  22.                                         System.out.println(line);
  23.                                         return false;
  24.                                 }
  25.                         }
  26.                         stack.push(line);
  27.                 }
  28.         return true;
  29.     }
复制代码
回复

使用道具 举报

🔗
郭郭Phoenix 2022-4-24 21:49:39 | 只看该作者
全局:
没权限下载附件+1 这是为什么
回复

使用道具 举报

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

本版积分规则

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