LeetCode(三)
最长不重复子串
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s==null || s.length()==0){return 0;}
int len = s.length(),maxLen=0,slow=0,fast=0;
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
for(;fast<len;fast++){
char currentChar = s.charAt(fast);
if(map.get(currentChar) == null){
map.put(currentChar,fast);
maxLen = Integer.max(maxLen,fast-slow + 1);
}else{
int lastPosition = map.get(currentChar);
if(lastPosition < slow){
maxLen = Integer.max(maxLen,fast - slow + 1);
map.put(currentChar,fast);
}else{
slow = lastPosition + 1;
map.put(currentChar,fast);
}
}
}
return maxLen;
}
}
String to Integer
public class Solution {
public int myAtoi(String str) {
int p = 0, ret = 0;
if(p == str.length()) return 0;
while(Character.isWhitespace(str.charAt(p)) && p<str.length()) p++;
boolean isNeg = (str.charAt(p) == '-') ? true : false;
if(str.charAt(p) == '+' || str.charAt(p) == '-') p++;
for(;p<str.length();p++){
if(str.charAt(p)>'9' || str.charAt(p)<'0'){
break;
}else{
int digit = str.charAt(p) - '0';
if(!isNeg && ret > (Integer.MAX_VALUE - digit)/10) return Integer.MAX_VALUE;
else if(isNeg && ret < (Integer.MIN_VALUE + digit)/10) return Integer.MIN_VALUE;
ret = ret * 10 + (isNeg ? -digit : digit);
}
}
return ret;
}
}
Reverse LinkedList
public class Solution {
public ListNode reverseList(ListNode head) {
if(head==null) return head;
ListNode newhead = new ListNode(0);
newhead.next = head;
while(head.next!=null) {
ListNode tmp = head.next;
head.next = head.next.next;
tmp.next = newhead.next;
newhead.next = tmp;
}
return newhead.next;
}
}
Reverse LinkedList II
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(head == null) return null;
ListNode dummy = new ListNode(0); // create a dummy node to mark the head of this list
dummy.next = head;
ListNode pre = dummy; // make a pointer pre as a marker for the node before reversing
for(int i = 0; i<m-1; i++) pre = pre.next;
ListNode start = pre.next; // a pointer to the beginning of a sub-list that will be reversed
ListNode then = start.next; // a pointer to a node that will be reversed
// 1 - 2 -3 - 4 - 5 ; m=2; n =4 ---> pre = 1, start = 2, then = 3
// dummy-> 1 -> 2 -> 3 -> 4 -> 5
for(int i=0; i<n-m; i++)
{
start.next = then.next;
then.next = pre.next;
pre.next = then;
then = start.next;
}
// first reversing : dummy->1 - 3 - 2 - 4 - 5; pre = 1, start = 2, then = 4
// second reversing: dummy->1 - 4 - 3 - 2 - 5; pre = 1, start = 2, then = 5 (finish)
return dummy.next;
}
}
Reverse Nodes in K-Group
public class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode begin;
if (head==null || head.next ==null || k==1)
return head;
ListNode dummyhead = new ListNode(-1);
dummyhead.next = head;
begin = dummyhead;
int i=0;
while (head != null){
i++;
if (i%k == 0){
begin = reverse(begin, head.next);
head = begin.next;
} else {
head = head.next;
}
}
return dummyhead.next;
}
public ListNode reverse(ListNode begin, ListNode end){
ListNode curr = begin.next;
ListNode next, first;
ListNode prev = begin;
first = curr;
while (curr!=end){
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
begin.next = prev;
first.next = curr;
return first;
}
}
Linked List Cycle
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode p = head,pre = head;
while(p != null && p.next != null){
if (p.next == head) return true;
p = p.next;
pre.next = head;
pre = p;
}
return false;
}
}
Linked List Cycle II
public class Solution {
public ListNode detectCycle(ListNode head) {
ListNode slow = head;
ListNode fast = head;
while (fast!=null && fast.next!=null){
fast = fast.next.next;
slow = slow.next;
if (fast == slow){
ListNode slow2 = head;
while (slow2 != slow){
slow = slow.next;
slow2 = slow2.next;
}
return slow;
}
}
return null;
}
}
Sort List
public class Solution {
ArrayList<Integer> theArray=new ArrayList<Integer>();
public ListNode sortList(ListNode head) {
if(head==null)return head;
ListNode focusNode=head;
while(focusNode!=null)
{
theArray.add(focusNode.val);
focusNode=focusNode.next;
}
quickSort(0,theArray.size()-1);
focusNode=head;
for(int i=0;focusNode!=null;i++)
{
focusNode.val=theArray.get(i);
focusNode=focusNode.next;
}
return head;
}
public void quickSort(int left,int right)
{
if(right-left<=0)
return;
else {
int pivot=theArray.get(right);
int partition=partioning(left, right, pivot);
quickSort(left, partition-1);
quickSort(partition+1, right);
}
}
public int partioning(int left,int right,long pivot)
{
int leftptr=left-1;
int rightptr=right;
while(true)
{
while(theArray.get(++leftptr)<pivot)
;
while(rightptr>0 &&theArray.get(--rightptr)>pivot)
;
if(leftptr>=rightptr)
break;
else {
swap(leftptr,rightptr);
}
}
swap(leftptr,right);
return leftptr;
}
public void swap(int indx1,int indx2)
{
int temp=theArray.get(indx1);
theArray.set(indx1, theArray.get(indx2));
theArray.set(indx2, temp);
}
}
Reorder List
public class Solution {
public void reorderList(ListNode head) {
if(head==null||head.next==null) return;
//Find the middle of the list
ListNode p1=head;
ListNode p2=head;
while(p2.next!=null&&p2.next.next!=null){
p1=p1.next;
p2=p2.next.next;
}
//Reverse the half after middle 1->2->3->4->5->6 to 1->2->3->6->5->4
ListNode preMiddle=p1;
ListNode preCurrent=p1.next;
while(preCurrent.next!=null){
ListNode current=preCurrent.next;
preCurrent.next=current.next;
current.next=preMiddle.next;
preMiddle.next=current;
}
//Start reorder one by one 1->2->3->6->5->4 to 1->6->2->5->3->4
p1=head;
p2=preMiddle.next;
while(p1!=preMiddle){
preMiddle.next=p2.next;
p2.next=p1.next;
p1.next=p2;
p1=p2.next;
p2=preMiddle.next;
}
}
}
Copy List with Random Pointer
public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
if(head==null){
return null;
}
RandomListNode n = head;
while (n!=null){
RandomListNode n2 = new RandomListNode(n.label);
RandomListNode tmp = n.next;
n.next = n2;
n2.next = tmp;
n = tmp;
}
n=head;
while(n != null){
RandomListNode n2 = n.next;
if(n.random != null)
n2.random = n.random.next;
else
n2.random = null;
n = n.next.next;
}
//detach list
RandomListNode n2 = head.next;
n = head;
RandomListNode head2 = head.next;
while(n2 != null && n != null){
n.next = n.next.next;
if (n2.next == null){
break;
}
n2.next = n2.next.next;
n2 = n2.next;
n = n.next;
}
return head2;
}
}
LeetCode(三)的更多相关文章
- LeetCode 三数之和 — 优化解法
LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- [leetcode]三数之和
三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...
- Leetcode | N-Queens I & II
N-Queens I The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no ...
- [LeetCode] 3Sum Smaller 三数之和较小值
Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...
- [LeetCode] 3Sum Closest 最近三数之和
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- [LeetCode] 3Sum 三数之和
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- LeetCode 628. Maximum Product of Three Numbers (最大三数乘积)
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- LeetCode 259. 3Sum Smaller (三数之和较小值) $
Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...
随机推荐
- Application Loader上传app程序
提示:如果您安装了XCode开发环境.在/Applications/XCode.app/Contents/Applications目录中可以找到Application Loader(右键XCode选择 ...
- url中参数以及callback后面的串
最近在写一个京东的爬虫,在模拟其http请求访问评论时,遇到http://club.jd.com/productpage/p-1419543-s-0-t-0-p-0.html?callback=jQu ...
- [家里蹲大学数学杂志]第053期Legendre变换
$\bf 题目$. 设 $\calX$ 是一个 $B$ 空间, $f:\calX\to \overline{\bbR}\sex{\equiv \bbR\cap\sed{\infty}}$ 是连续的凸泛 ...
- restfull api
REST 表示状态传输.这是一个体系结构样式,可用于设计网络服务,可以被各种客户端消耗.核心思想是,不使用如CORBA,RPC或SOAP复杂的机制在机器之间进行连接,简单的 HTTP 用于使它们之间调 ...
- 写CSS的布局
刚写页面的时候写CSS觉得一个选择器中的每个声明分别占一行看起来舒服些,但随着页面大了,写的东西多了,看起来就很乱了.所以每个声明连着写其实更加好些
- JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
一.Iframe 篇 公共部分 //父对象得到子窗口的值 //ObjectID是窗口标识,ContentID是元素ID function GetValue(ObjectID,ContentID) { ...
- java学习第10天 (增加关于eclipse添项目)
自己遇到一个问题..觉得有必要说下,就是如何将别人发给你的文件也就是项目如何导入到你的eclipse中,不是直接add那么简单,首先右键找到import,找到general,展开找到existing ...
- Spring day01笔记
struts:web层,比较简单(ValueStack值栈,拦截器) hibernate:dao层,知识点杂 spring:service层,重要,讲多少用多少 --> [了解] sprin ...
- 移动端自动化环境搭建-python的安装
安装python A.安装依赖 由于 Robot Framework 框架是基于 Python 语言开发的,要想使用 Robot Framework 首先需要有 Python环境. B.安装过程 下载 ...
- Provisional headers are shown,本地测试成功,服务器运行却失败
基于MVC的项目 具体情况是一个页面在访问的时候进不了首页,但详细页面却可以进去 下面说说解决方法和思路,以便找出问题所在 第一:把服务器代码下载到本地运行,代码是否出错,出错了,问题找到了,没出错接 ...