当前位置: 首页 > news >正文

面试常考算法2(核心+acm模式)

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};}}

相关文章:

  • OpenHarmony SystemUI开发——修改状态栏和导航栏的高度
  • 读取传感器发来的1Byte数据:分低位先行和高位先行的处理方法
  • Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)
  • 【MySQL】数据库、数据表的基本操作
  • Python MNE-Python 脑功能磁共振数据分析
  • 第十五章,SSL VPN
  • 在 Spring Boot 中选择合适的 HTTP 客户端
  • React Native 前瞻式重大更新 Skia WebGPU ThreeJS,未来可期
  • CI/CD面试题及答案
  • WEB前端表单及表格标签综合案例
  • 青少年编程与数学 02-019 Rust 编程基础 03课题、变量与可变性
  • 禁止Pydda默认下载数据
  • 第四天 从CAN总线到Spark/Flink实时处理
  • 解构C++高级命名空间:构建空间作用域·控制兼容
  • 初等数论--欧拉函数积性的证明
  • 新闻发稿筛选媒体核心标准:影响力、适配性与合规性
  • 记录一次使用thinkphp使用PhpSpreadsheet扩展导出数据,解决身份证号码等信息科学计数法问题处理
  • 【MySQL】存储引擎 - FEDERATED详解
  • 笔记,麦克风的灵敏度
  • allure生成测试报告(搭配Pytest、allure-pytest)
  • 中国科协发声:屡禁不止的奇葩论文再次敲响学风建设警钟
  • 协会:坚决支持司法机关依法打击涉象棋行业的违法行为
  • 雇来的“妈妈”:为入狱雇主无偿带娃4年,没做好准备说再见
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作
  • 身临其境感受伟人思想力量,“马克思书房”在上海社科馆揭幕
  • AI智能体,是不是可以慢一点? | ToB产业观察