最长不重复子串


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(三)的更多相关文章

  1. LeetCode 三数之和 — 优化解法

    LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...

  2. Leetcode(三)无重复字符的最长子串

    3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...

  3. [leetcode]三数之和

    三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...

  4. 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 ...

  5. [LeetCode] 3Sum Smaller 三数之和较小值

    Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...

  6. [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 ...

  7. [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 ...

  8. LeetCode 628. Maximum Product of Three Numbers (最大三数乘积)

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  9. 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 < ...

随机推荐

  1. json_encode和json_decode

    <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ...

  2. Spring学习 Ioc篇(三)

    1.在注解注入方式中,首先要在xml中引入如下的红线的命名空间: <?xml version="1.0" encoding="UTF-8" ?> & ...

  3. Intellij IDEA的激活

    选server激活,填http://www.iteblog.com/idea/key.php即可 现在改为http://idea.iteblog.com/key.php

  4. RPM方式安装MySQL5.6和windows下安装mysql解压版

    下载地址: http://cdn.MySQL.com/archives/mysql-5.6/MySQL-server-5.6.13-1.el6.x86_64.rpmhttp://cdn.mysql.c ...

  5. (转)无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-

    HRESULT:0x80030002 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft ...

  6. ThinkPHP的路由形式

    首先解释一下,这里路由的意思是:系统从URL参数中分析出当前请求的分组.控制器.操作 .另外我的网址根目录是放在article目录下的,Thinkphp主要有下面几种路由形式 1.pathinfo路径 ...

  7. python3内置函数详解

    内置函数 注:查看详细猛击这里 abs() 对传入参数取绝对值 bool() 对传入参数取布尔值, None, 0, "",[],{},() 这些参数传入bool后,返回False ...

  8. C++学习基础五之函数参数——形参

    一.理论部分 C++中函数形参主要分为两类,如图1所示, 图1 总结: 一.当函数参数为非引用形参时,传进函数体内的是实参的拷贝,(注意,对于基本类型而言,拷贝的是实参的值,对于指针而言拷贝的是实参的 ...

  9. 第五百八十六天至第六百零五天 how ccan I 坚持

    考研中,勿扰... 我是个逗比,哈哈. 时间不够用了呢,哎.

  10. python之fabric(二):执行模式(转)

    执行模式 执行模式可以让你在多个主机上执行多个任务. 执行策略: 默认fabric是单个有序地执行方法,其行为如下: 1. 创建一系列任务,通过fab任务执行要执行的任务: 2. 根据主机列表定义,去 ...