15. 三数之和
核心代码模式
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ans=new ArrayList<>();Arrays.sort(nums);int len=nums.length;int pre=2000000;for(int i=0;i<len-2;i++){while(i<len-2&&nums[i]==pre)i++; //移动到未重复位置pre=nums[i];for(int j=i+1,k=len-1;j<k;){int sum=nums[i]+nums[j]+nums[k];if(sum<0)j++;else if(sum>0)k--;else{ //加入结果ans.add(Arrays.asList(nums[i],nums[j],nums[k]));while(j<k&&nums[j]==nums[j+1])j++; //移动j++;}}}return ans;}
}
手写输入输出
import java.util.*;public class Javaacm
{
//输入格式
// [-1,0,1,2,-1,-4]public static void main(String []args){Scanner scanner=new Scanner(System.in);String s=scanner.next();String str[]=s.substring(1,s.length()-1).split(",");int len=str.length;int nums[]=new int[len];for(int i=0;i<len;i++){nums[i]=Integer.valueOf(str[i]);}Arrays.sort(nums);List<List<Integer>> ans=new ArrayList<>();int pre=2000000;for(int i=0;i<len-2;i++){while(i<len-2&&nums[i]==pre)i++;pre=nums[i];for(int j=i+1,k=len-1;j<k;){int sum=nums[i]+nums[j]+nums[k];if(sum<0)j++;else if(sum>0)k--;else{ans.add(Arrays.asList(nums[i],nums[j],nums[k]));while(j<k&&nums[j]==nums[j+1])j++;j++;}}}//打印二维数组for(List<Integer> cur:ans){System.out.println("["+cur.get(0)+","+cur.get(1)+","+cur.get(2)+"]");}
// [-1,-1,2]
// [-1,0,1]}
}
53. 最大子数组和
核心代码模式
class Solution {public int maxSubArray(int[] nums) {
//在线处理算法int sum=0,ans=-100000;int len=nums.length;for(int i=0;i<len;i++){sum+=nums[i];ans=Math.max(ans,sum);if(sum<0)sum=0; //前置是负的直接丢掉}return ans;}
}
手写输入输出
import java.util.*;public class Javaacm
{
//输入格式
//[-2,1,-3,4,-1,2,1,-5,4]public static void main(String []args){Scanner scanner=new Scanner(System.in);String s=scanner.next();String str[]=s.substring(1,s.length()-1).split(",");int len=str.length;int nums[]=new int[len];for(int i=0;i<len;i++){nums[i]=Integer.valueOf(str[i]);}int ans=-2000000,sum=0;for(int i=0;i<len;i++){sum+=nums[i];ans=Math.max(ans,sum);if(sum<0)sum=0;}System.out.print(ans); //6}
}
21. 合并两个有序链表
核心代码模式
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode hh=new ListNode(),p=hh;while(list1!=null&&list2!=null){if(list1.val<list2.val){p.next=list1;list1=list1.next;}else{p.next=list2;list2=list2.next;}p=p.next;}if(list1!=null)p.next=list1;else p.next=list2;return hh.next;}
}
手写输入输出
import java.util.*;class ListNode
{int val;ListNode next;ListNode(){}ListNode(String val){this.val=Integer.valueOf(val);}ListNode(int val,ListNode next){this.val=val;this.next=next;}
}
public class Javaacm
{
//输入格式
// [1,2,4]
// [1,3,4]public static void main(String []args){Scanner scanner=new Scanner(System.in);String s=scanner.next();String str1[]=s.substring(1,s.length()-1).split(",");s=scanner.next();String str2[]=s.substring(1,s.length()-1).split(",");ListNode list1=new ListNode(str1[0]);ListNode list2=new ListNode(str2[0]);ListNode p=list1;for(int i=1;i<str1.length;i++){ListNode cur=new ListNode(str1[i]);p.next=cur;p=p.next; }p=list2;for(int i=1;i<str2.length;i++){ListNode cur=new ListNode(str2[i]);p.next=cur;p=p.next; }//初始化完成ListNode hh=new ListNode();p=hh;while(list1!=null&&list2!=null){if(list1.val<list2.val){p.next=list1;list1=list1.next;}else{p.next=list2;list2=list2.next;}p=p.next;}if(list1!=null)p.next=list1;else p.next=list2;p=hh.next;while(p!=null){System.out.print(p.val+"->");p=p.next;}System.out.print("null");//1->1->2->3->4->4->null}}
5. 最长回文子串
核心代码模式
class Solution {int len;String s;public String longestPalindrome(String str) {len=str.length();s=str;int []ans=new int[]{1,0};for(int i=0;i<len;i++){int one[]=circleselect(i,i);int two[]=circleselect(i,i+1);int max[]=one[0]>two[0]?one:two;if(ans[0]<max[0])ans=max;}return s.substring(ans[1],ans[1]+ans[0]);}int[] circleselect(int i,int j){while(i>=0&&j<len){if(s.charAt(i)!=s.charAt(j))break;i--;j++;}return new int[]{j-i-1,i+1};}
}
手写输入输出
import java.util.*;public class Javaacm
{
//输入格式
//babadstatic String s;public static void main(String []args){Scanner scanner=new Scanner(System.in);s=scanner.next();int len=s.length();int ans[]=new int[]{1,0};for(int i=0;i<len;i++){int one[]=circleselect(i,i);int two[]=circleselect(i,i+1);int[] max=one[0]<two[0]?two:one;if(ans[0]<max[0])ans=max;}System.out.print(s.substring(ans[1],ans[1]+ans[0]));//bab}static int [] circleselect(int l,int r ){while(l>=0&&r<s.length()){if(s.charAt(l)!=s.charAt(r)) break;l--;r++;}return new int[]{r-l-1,l+1};}}