LeetCode Day1
Palindrome Linked List
/** * LeetCode: Palindrome Linked List * Given a singly linked list, determine if it is a palindrome. * Could you do it in O(n) time and O(1) space? * * @author LuoPeng * @time 2015.8.3 * */ public class Solution { /** * Reverse the second part, then compare the nodes one by one. * Time: O(n) + O((n-1)/2) + O(n/2-1) + O(n/2) + O(1) = O(n) * Space: Only 7 parameters are needed, so it is O(1) * * @param head the first node of a linked list * @return true if it is a palindrome, false otherwise. */ public boolean isPalindrome(ListNode head) { if ( head == null || head.next == null) {return true;} ListNode middle = null; // the middle index of linked list ListNode current = null; // the nodes need to be reversed ListNode lastHaveReversed = null; // the last node that has been reversed ListNode temp = head; /* * the size of linked list * Time: O(n) */ int length = 0; while (temp != null) { temp = temp.next; length++; } /* * get the index of middle * Time: O((n-1)/2) */ int i = 0, size; middle = head; size = (length-1)/2; while ( i < size) { middle = middle.next; i++; } /* * reverse the last half part, from middleNext to the end * just like the insert-sort * Time: O(n/2-1) */ size = length/2-1; // the number of nodes need to be reversed lastHaveReversed = middle.next; current = lastHaveReversed.next; for ( i = 0; i < size; i++) { lastHaveReversed.next = current.next; current.next = middle.next; middle.next = current; current = lastHaveReversed.next; } /* * judge * Time: O(n/2) */ temp = head; // the start of first part middle = middle.next; // the start of second part for ( i = 0; i < length/2; i++) { if ( temp.val == middle.val) { temp = temp.next; middle = middle.next; } else { break; } } return i == length/2; } /** * For every node in the first part, find the other one in the second part and compare the value * Time: O(n) * Space: O(1) * * @param head * @return */ public boolean isPalindrome2(ListNode head) { if ( head == null || head.next == null) { return true; } else { ListNode temp = head; int length = 0; while (temp != null) { temp = temp.next; length++; } int i, j; for ( i = 0; i < length/2; i++) { j = i; temp = head; while (j < length-1-i) { temp = temp.next; j++; } if ( head.val != temp.val) { break; } head = head.next; } return i == length/2; } } }
Implement Queue using Stacks
/** * LeetCode: Implement Queue using Stacks * * @author LuoPeng * @time 2015.8.3 * */ class MyQueue { // Push element x to the back of queue. public void push(int x) { main.push(x); } // Removes the element from in front of queue. public void pop() { int size = main.size(); for ( int i = 0; i < size-1; i++ ) { help.push(main.peek()); main.pop(); } main.pop(); for ( int i = 0; i < size-1; i++) { main.push(help.peek()); help.pop(); } } // Get the front element. public int peek() { int size = main.size(); for ( int i = 0; i < size-1; i++ ) { help.push(main.peek()); main.pop(); } int value = main.peek(); for ( int i = 0; i < size-1; i++) { main.push(help.peek()); help.pop(); } return value; } // Return whether the queue is empty. public boolean empty() { return main.empty(); } private MyStack main = new MyStack(); private MyStack help = new MyStack(); } class MyStack { public void push(int x) { values.add(x); } public void pop() { values.remove(values.size()-1); } public int peek() { return values.get(values.size()-1); } public boolean empty() { return values.size() == 0; } public int size() { return values.size(); } private List<Integer> values = new ArrayList<Integer>(); }
LeetCode Day1的更多相关文章
- 【LeetCode算法题库】Day1:TwoSums & Add Two Numbers & Longest Substring Without Repeating Characters
[Q1] Given an array of integers, return indices of the two numbers such that they add up to a specif ...
- leetcode每日刷题计划-简单篇day1
orzorz开始刷题 争取坚持每周平均下来简单题一天能做两道题吧 非常简单的题奇奇怪怪的错误orz越不做越菜 Num 7 整数反转 Reverse Integer 刚开始多给了一个变量来回折腾占地方, ...
- 刷leetcode是什么样的体验?【转】
转自:https://www.zhihu.com/question/32322023 刷leetcode是什么样的体验? https://leetcode.com/ 1 条评论 默认排序 按时间排 ...
- 知乎上的一些文章---leetcode【笔记1】
张土汪 http://github.com/shawnfan Java{script}代码仔 42 人赞同 [1.19.2017] 更新: 2017年1月17日, 陪我征战多年的 2014 MackB ...
- 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)
Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
随机推荐
- NPOI新建和读取EXCEL
//基本NPOI 1.2.5.0 static void Main(string[] args) { string path = string.Format("E:\\export{0}.x ...
- 004 range的用法
- Java IO 和 NIO
昨天面试问到了有关Java NIO的问题,没有答上来.于是,在网上看到了一篇很有用的系列文章讲Java IO的,浅显易懂.后面的备注里有该系列文章的链接.内容不算很长,需要两个小时肯定看完了,将该系列 ...
- Control character in cookie value, consider BASE64 encoding your value-Cookie保存中文出错[转]
项目当中用到cookie保存中文,但是会报如下错误: Control character in cookie value, consider BASE64 encoding your value 大概 ...
- wampserver 自定义站点
wampserver配置多站点,安装完wampserver后,我们要做的肯定是很多项目,那么如何配置wampserver多站点呢. 在“httpd.conf”文件中查找:Include conf/ex ...
- PHP记录点击数方法
1.第一种方法: $id = $_GET['id']; //获取文章ID $sql = "UPDATE base SET hits = hits+1 WHERE id = '$id'&quo ...
- php的DOMDocument 如何判断xml是否存在某节点
在做xml解释时,需要判断是否存在某个节点,查了手册函数,硬是没有发现那个函数有这个功能(如果你知道的话,请留言,博主感激涕零). 下面,就说下博主,经过N多博文,论坛查阅后,得到的一种方法(看到的博 ...
- python中的星号*、**的意义
我们都知道,定义一个函数,当传入的参数个数未知时就可以使用*来表示. 单引号*: def test(*args): if len(args) >= 4: print(arg[3]) test(1 ...
- Spring中IoC - 两种ApplicationContext加载Bean的配置
说明:Spring IoC其实就是在Service的实现中定义了一些以来的策略类,这些策略类不是通过 初始化.Setter.工厂方法来确定的.而是通过一个叫做上下文的(ApplicationConte ...
- python学习day3
目录: 1.集合set 2.计数器 3.有序字典 4.默认字典 5.可命名元组 6.队列 7.深浅拷贝 8.函数 9.lambda表达式 10.内置函数 一.集合set set是一个无序且不重复的元素 ...