第一题
1629. 按键持续时间最长的键
eclipse代码:
package leetcode;
import java.util.ArrayList;
import java.util.Arrays;
public class _01_5546
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int[] re = {9,29,49,50};String keys = "cbcd";
int max=re[0]-0;ArrayList<Character> array=new ArrayList<Character>();
for(int i=1;i<re.length;i++) {
max=Math.max(re[i]-re[i-1], max);
}
if(max==re[0]-0)array.add(keys.charAt(0));
for(int i=1;i<re.length;i++) {
if(re[i]-re[i-1]==max)
array.add(keys.charAt(i));
}
System.out.println(array.get(array.size()-1));
}
}
leetcode代码:
class Solution {
public char slowestKey(int[] re, String keys) {
int max=re[0]-0;
ArrayList<Character> array=new ArrayList<Character>();
for(int i=1;i<re.length;i++) {
max=Math.max(re[i]-re[i-1], max);
}
if(max==re[0]-0)array.add(keys.charAt(0));
for(int i=1;i<re.length;i++) {
if(re[i]-re[i-1]==max)
array.add(keys.charAt(i));
}
return array.get(array.size()-1);
}
}
第二题
1630. 等差子数组
eclipse代码:
package leetcode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class _02_5547
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int[] nums = {4,6,5,9,3,7};
int[] l = {0,0,2};
int[] r = {2,3,5};
List<Boolean> check=new ArrayList<Boolean>();
int size=0;
while(size<l.length) {
if(r[size]==l[size]) {
check.add(true);
break;
}
int[] help=new int [r[size]-l[size]+1];
int f=0;
for(int i=l[size];i<=r[size];i++)
{help[f++]=nums[i];}
Arrays.sort(help);
System.out.println(Arrays.toString(help));
int d=help[1]-help[0];//公差
boolean yes=true;
for(int i=1;i<help.length;i++) {
if(help[i]-help[i-1]!=d) {
{yes=false;
break;
}
}
}
if(yes)check.add(true);
else
check.add(false);
size++;
}
System.out.println(check);
}
}
leetcode代码:
class Solution {
public List<Boolean> checkArithmeticSubarrays(int[] nums, int[] l, int[] r) {
List<Boolean> check=new ArrayList<Boolean>();
int size=0;
while(size<l.length) {
if(r[size]==l[size]) {
check.add(true);
break;
}
int[] help=new int [r[size]-l[size]+1];
int f=0;
for(int i=l[size];i<=r[size];i++)
{help[f++]=nums[i];}
Arrays.sort(help);
System.out.println(Arrays.toString(help));
int d=help[1]-help[0];//公差
boolean yes=true;
for(int i=1;i<help.length;i++) {
if(help[i]-help[i-1]!=d) {
{yes=false;
break;
}
}
}
if(yes)check.add(true);
else
check.add(false);
size++;
}
return check;
}
}
第三题
1631 最小体力消耗路径
二分查找+bfs
eclipse代码:
package leetcode;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
public class _03_5548
{
private static class Job {
int x;
int y;
public Job(int x,int y) {
this.x=x;
this.y=y;
}
}
static int max;
// [1,2,3],[3,8,4],[5,3,5] 答案为:1
public static void main(String [] args) {
int heights[][] = {{1,2,3},{3,8,4},{5,3,5}};
int left=0;int right=999999;//right的值一定要足够大才行
int m=heights.length;
int n=heights[0].length;
int[] dx= {1,0,-1,0};
int[] dy= {0,1,0,-1};
while(left<=right) {//采用二分查找的方法【小于等于】
int mid=(left+right)/2;//先限定一个mid值(加一个限定条件)
int[][] biaoji=new int[m][n];
Queue<Job> q=new LinkedList<Job>();
q.add(new Job(0,0));
while(q.size()!=0) {
Job job=q.poll();
// biaoji[job.x][job.y]=1;
for(int i=0;i<4;i++) {
int nx=job.x+dx[i];
int ny=job.y+dy[i];
if(nx>=0&&nx<m&&ny>=0&&ny<n&&biaoji[nx][ny]==0
&&Math.abs(heights[nx][ny]-heights[job.x][job.y])<=mid) {//满足限定条件才能加入队列
q.add(new Job(nx,ny));
biaoji[nx][ny]=1;
}
}
}
if(biaoji[m-1][n-1]==1){//限定条件mid的值可能太大了
max=mid;
right=mid-1;
}
else//限定的mid值太小了,最后都到不了终点
left=mid+1;
}
System.out.println(max);
}
}
leetcode代码:
class Solution {
public int minimumEffortPath(int[][] heights) {
int max=0;
int left=0;int right=999999;//right的值一定要足够大才行
int m=heights.length;
int n=heights[0].length;
int[] dx= {1,0,-1,0};
int[] dy= {0,1,0,-1};
while(left<=right) {//采用二分查找的方法
int mid=(left+right)/2;//先限定一个mid值(加一个限定条件)
int[][] biaoji=new int[m][n];
Queue<Job> q=new LinkedList<Job>();
q.add(new Job(0,0));
while(q.size()!=0) {
Job job=q.poll();
// biaoji[job.x][job.y]=1;
for(int i=0;i<4;i++) {
int nx=job.x+dx[i];
int ny=job.y+dy[i];
if(nx>=0&&nx<m&&ny>=0&&ny<n&&biaoji[nx][ny]==0
&&Math.abs(heights[nx][ny]-heights[job.x][job.y])<=mid) {//满足限定条件才能加入队列
q.add(new Job(nx,ny));
biaoji[nx][ny]=1;
}
}
}
if(biaoji[m-1][n-1]==1){//限定条件mid的值可能太大了
max=mid;
right=mid-1;
}
else//限定的mid值太小了,最后都到不了终点
left=mid+1;
}
return max;
}
}
class Job {
int x;
int y;
public Job(int x,int y) {
this.x=x;
this.y=y;
}
}
以上是我自己想出来的解法,现阶段的能力也就三题了。
leetcode可以修改变量名,但是不能修改原始题目的方法名,会报错的。
欢迎指教,一起进步呀!
才疏学浅,还请不吝赐教~