2019/08/25 leetcode

2019/08/25: L230, L226, L18, L234, L23

1. L230 Kth smallest element in BST

借助 Stack 或 LinkedList inorder traveresal, LinkedList会更快

ArrayList, LinkedList, Vector, Stack  https://blog.csdn.net/iteye_11495/article/details/82618748

2. L226 Invert Binary Tree

3. L18 4Sum

Two pointers

 1 public List<List<Integer>> fourSum(int[] nums, int target) {
 2
 3         List<List<Integer>> res = new LinkedList<>();
 4         if(nums == null || nums.length < 4) return res;
 5         Arrays.sort(nums);
 6         int k, z;
 7         for(int i = 0; i<nums.length-1;i++){
 8             if(i>0 && nums[i]==nums[i-1]) continue;
 9
10             //pruning
11             if(nums[i]*4 > target) break;
12             if(nums[i] + 3* nums[nums.length-1]<target) continue;
13
14             for(int j =i+1; j<nums.length;j++){
15                 if(j>i+1 && nums[j]==nums[j-1]) continue;
16
17                 //pruning
18                 if(nums[i]+ nums[j]*3 >target) break;
19                 if(nums[i] + nums[j]+ 2* nums[nums.length-1]<target) continue;
20
21                 k = j+1;
22                 z = nums.length -1;
23                 while(k<z){
24                     int sum = nums[i] + nums[j] + nums[k] + nums[z];
25                     if(sum == target){
26                         List<Integer> list = new ArrayList<>();
27                         list.add(nums[i]);
28                         list.add(nums[j]);
29                         list.add(nums[k]);
30                         list.add(nums[z]);
31                         res.add(list);
32                         while(k<z && nums[k]==nums[k+1])k++;
33                         k++;
34                         while(k<z && nums[z]==nums[z-1])z--;
35                         z--;
36                     }else if(sum > target) z--;
37                     else k++;
38                 }
39             }
40         }
41         return res;
42     }

加上pruning代码,beat 100%。

4. L234 Palindrome Linked List

slow fast pointers, 后半段reverse

Time O(n) spaceO(1)

 public boolean isPalindrome(ListNode head) {
        if( head==null || head.next==null ) return true;

        ListNode slow = head;
        ListNode fast = head.next;
        while(fast!=null && fast.next!=null){
            slow = slow.next;
            fast = fast.next.next;
        }
        ListNode pre = null;
        slow = slow.next;
        //reveres node after slow
        while(slow!=null){
            ListNode next = slow.next;
            slow.next = pre;
            pre = slow;
            slow = next;
        }

        while(pre!=null && head!=null){
            if(head.val!=pre.val) return false;
            head = head.next;
            pre = pre.next;
        }
        return true;
    }

5. L23. Merge k Sorted Lists

min heap

public ListNode mergeKLists(ListNode[] lists) {
        if(lists == null || lists.length == 0) return null;
        if(lists.length ==1) return lists[0];
        PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(new Comparator<ListNode>(){
            public int compare(ListNode l1, ListNode l2){
                return l1.val - l2.val;
            }
        });
        for(ListNode l : lists){
            if(l!=null) pq.offer(l);
        }
        ListNode head = new ListNode(0);
        ListNode curr = head;
        while(!pq.isEmpty()){
            ListNode newNode = pq.poll();
            curr.next = newNode;
            curr = curr.next;
            if(newNode.next!=null){
                pq.offer(newNode.next);
            }
        }
        return head.next;
    }

原文地址:https://www.cnblogs.com/rySZ/p/11411472.html

时间: 2024-11-05 17:17:48

2019/08/25 leetcode的相关文章

2019.08.25校内模拟赛Graph

其实这是道很难的容斥. 所以我考场上直接考虑了\(m=0\)的暴力和白给的\(m=\cfrac{n(n-1)}{2}\)的\(10\)分. 白给的那十分是完全图,根据题意就只需要输出\(0\)就行了. 而至于\(m=0\)的\(40pts\),稍加思索就会发现它和错排是双射关系... 于是,就直接错排就好了. 但我当时忘了错排公式是什么了...递推式也没想起来... 于是我就妄想手推容斥形式的错排,但是我死了,没推出来. 于是我就\(10pts\)走人了. 后来在\(wqy\)的指导下推了出来,

2019.08.07学习整理

2019.08.07学习整理 字符编码 1.什么是字符编码 字符编码是将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,该标准无非是人类字符与数字的对应关系,称之为字符编码表. 2.字符编码发展史与分类 计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系.最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号. 当然我们编程语言都用英文没问题,ASCII够用,但是在处理数据

2019.08.27学习整理

2019.08.27学习整理 什么是继承 是一种新建类的方式,继承了一个类,类中的属性和方法就在子类中 父类/基类 子类/派生类 新式类:只要继承了object类,就是新式类,在python3中,默认继承object类 -Python3中:默认继承object class A: pass -python2中,需要显示的指定继承object --经典类:没有继承object的类,就是经典类 -python3中没有经典类 -python2中才有 利用继承减少代码冗余 #继承重用父类方法方式一:指名道

2019.08.29学习整理

2019.08.29学习整理 绑定方法与非绑定方法 绑定方法 对象绑定方法 类的绑定方法 绑定方法:特殊之处,绑定给谁就是谁来调,并且会把自身调过来 类的绑定方法 绑定给类,类来调用,会把类自身传过来 类的绑定方法用在什么地方 不需要通过对象,只需要通过类就能获取到一些东西的时候,用类的绑定方法 类的绑定方法,可以由对象来调 class Person: ''' 注释的内容 ''' def __init__(self,name,age): # print(self) self.name=name

2019.4.25 周四 阴有小雨

今天晚上跟朋友吃了一顿小龙虾和烧烤,然后又看了一把复联四,顺便交流了一波java技术加吹牛,very happy! 周五早上有个去亚信的面试,咨询了在那个部门工作的小伙伴,说用到kalfka和storm.天呐我也有没实际用过,那就随便自学一点点外加背几题面试题吧. 一.kalfka Apache Kafka® is a distributed streaming platform. a few concepts: --Kafka is run as a cluster on one or mor

【2019.9.25】Za

容斥 容斥 \(\Big|\bigcup\limits_{i=1}^nS_i\Big|=\sum\limits_{m=1}^n(-1)^{m-1}\ \sum\limits_{a_i<a_{i+1}}\Big|\bigcap\limits_{i=1}^mS_{a_i}\Big|\) 不定方程非负整数解计数 不定方程\(\sum_{i=1}^n\ x_i=m\)和\(n\)个限制条件\(x_i\le b_i\) 没有限制时 其非负整数解为\(C_{m+n-1}^{m-1}\) 相当于有\(m\)个

2019/10/13 leetcode周赛

只做出了2题,第三题动态规划根本没思路,菜死了 第三题.掷骰子模拟 1 int dieSimulator(int n, vector<int>& rollMax) { 2 vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(6, vector<int>(16, 0))); 3 int mod = 7 + 1e9; 4 for (int i = 0; i

2014/08/25

过了一个双休,完完整整的休了两天,周六是最幸福的时候,休息了一天,闭眼的时候还可以说,明天还有一天,^_^ 周日去了西大,看到新立的路标,高大上的路名:复兴大道...然后看看装修中满目疮痍的路,真实漂亮到极点. 在小卖部喝的新口味的雪碧:Ice Mint还不错啊,挺好的,大学南路吃了泡馍烤牛筋,然后回来蜗居. 总结就是,周末啥事没做,然后想到今天只要上班就好了,没有开学,也没有见老师,不需要发文章,不需要考试,最重要的,没有不可预期的未来,只要好好做工作,未来是可以抓到手里的,每天都能学到新知识

2015/08/25

今天周二,本打算今天能上线一版,让测试部门的同志们测试一下,但是,各种问题都出来了,接着昨天的问题,修改成功后,网前台页面返回参数“修改成功!”,页面在跳转两次controller之后,在jsp页面中不能接收到数据,在第二个controller中能接收到值,但是jsp页面中没有值.思考良久,突然发现,第二个controller没有把值返回到jsp页面,好low啊!!!!返回后,发现返回的数据乱码.在第二个controller接收的时候就是乱码,经过度娘的知道之后,发现需要配置tomcat的配置文