活跃农民
- 积分
- 482
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-9-2
- 最后登录
- 1970-1-1
|
楼主请问python validation那题,为什么用stack复杂度会优于brute force呢?我的brute force思路是用个list存,然后每一次来新的line跟preLine做比较,我觉的复杂度跟stack一样 都是O(N) 吧,这是我不用stack和用stack的代码:
- private static boolean validate(String[] lines) {
- List<String> list = new ArrayList<String>();
- for(String line : lines) {
- int tab = getTab(line);
- if(list.size() == 0 && tab != 0) {
- System.out.println(line);
- return false;
- }
-
- if(tab == 0 && list.size() == 0) {
- list.add(line);
- }else {
- String preLine = list.get(list.size() - 1);
- int preTab = getTab(preLine);
- if (isControl(preLine)) {
- if (tab != preTab + 1) {
- System.out.println(line);
- return false;
- } else {
- list.add(line);
- }
- } else {
- if (tab > preTab) {
- System.out.println(line);
- return false;
- } else {
- list.add(line);
- }
- }
- }
- }
- return true;
- }
复制代码
- public static boolean validateStack(String[] lines){
- //就用stack来存之前的line就行
- Stack<String> stack = new Stack<>();
- for (String line : lines) {
- int tab = getTab(line);
-
- if (stack.isEmpty()) {// 先检查是不是第一行
- if (tab != 0) {
- System.out.println(line);
- return false;
- }
- } else if (isControl(stack.peek())) {// 再检查上一行是不是control statement
- if (getTab(stack.peek()) + 1 != tab) {
- System.out.println(line);
- return false;
- }
- } else {
- while (!stack.isEmpty() && getTab(stack.peek()) > tab) {
- stack.pop();
- }
- if (getTab(stack.peek()) != tab) {
- System.out.println(line);
- return false;
- }
- }
- stack.push(line);
- }
- return true;
- }
复制代码 |
|