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

面试常考算法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};}}

http://www.xdnf.cn/news/5008.html

相关文章:

  • [AI ][Dify] Dify Tool 插件调试流程详解
  • 使用 Python 构建图像编辑应用:一步步指南
  • 强化学习PPO算法学习记录
  • 并发设计模式实战系列(19):监视器(Monitor)
  • 支付宝沙盒模式商家转账经常出现 响应异常: 解包错误
  • 《微机原理》微机程序段 计算机编程数据分区
  • 修改docker为国内源
  • YOLOv12云端GPU谷歌免费版训练模型
  • 访问网页的全过程(分步骤的详细解析)
  • 【java反射修改注解属性】java 通过反射,动态修改注解的某个属性值
  • 抖音到店摸着京东外卖过河
  • Go语言的宕机恢复,如何防止程序奔溃
  • UnityDots学习(五)
  • xxl-job简单入门使用教程
  • 【WebGIS系列】WebGIS 开发相关的资源
  • 地图、图表的制作要领
  • Spring Boot初级教程:从零搭建企业级Java应用
  • Milvus(18):IVF_PQ、HNSW
  • 如何利用爬虫获得1688商品详情:实战指南
  • HiklQQBot开源程序基于python的轻量qq官方机器人框架 快速部署启动官方QQ机器人 插件编写简单易懂 支持小白AI一键生成插件
  • 滑动窗口-窗口中的最大/小值-单调队列
  • 强化学习三大基本方法-DP、MC、TD
  • 英文单词词根记忆法:后缀 ology, onomy, graphy词根有哪些单词
  • websocketd 10秒教程
  • 力扣热题——到达最后一个房间的最少时间 II
  • QML 图像变换(缩放、平移、旋转)
  • 【RLHF】 Reward Model 和 Critic Model 在 RLHF 中的作用
  • AD新版本Skill的使用
  • SecureCRT网络穿透/代理
  • Python毕业设计219—基于python+Django+vue的房屋租赁系统(源代码+数据库+万字论文)