博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode-java题解(每天更新)
阅读量:5796 次
发布时间:2019-06-18

本文共 3106 字,大约阅读时间需要 10 分钟。

hot3.png

说明:选用java,重在体会,性能不是最优。欢迎转载:。

先给出一个leetcode的已有答案,为什么上来直接给出答案,因为这个好多答案写的都非常简洁,不太易懂,还是建议先自己做,答案只是参考。

1,https://leetcode.com/problems/two-sum/,题目大意是给出一个无序的数组和一个目标值,假设数组里有且只有两个数相加和目标值相等,按索引由小到大输出这两个数字的索引,从1开始索引。

思路:既然题目假设有两个数a,b肯定相加得到目标值c,那么肯定有c-a存在于数组中,于是问题转化成了如何高效检查一个数组中是否包含某个值,在这里找到一些答案。于是采用先排序,然后用Arrays.binarySearch的方法,然后根据OJ提示的一些错误,修改几下就好了。具体代码如下,254ms,和九章以及其他解题答案不太一样。

import java.util.Arrays;public class Solution1 {	 public static int[] twoSum(int[] numbers, int target) 	 {	    	int[] num = numbers.clone();	    	Arrays.sort(num);	        int size = num.length;	        int[] answers = new int[2];	        for(int i=0;i
0)          {          int count=0,index1 = 0,index2=0;          for(int j=0;j
index2?index1:index2)+1;          break;          }          else           {          index1=j; }                   }          }                            }         }         return answers;     }     public static void main(String[] args)      { int[] test = {-3,4,3,90}; int target = 0; int[] result = {0,0}; result = twoSum(test,target); System.out.println(result[0]+","+result[1]); }}

2,,题目大意是有两个有序数组AB,长度mn,求出这两个数组的中位数,log(m+n)。分两种思路,一是先归并成C,再求中位数;二是分别求出AB的中位数,利用二分查找找出最终结果,中位数的概念。

我先用第一种容易理解的方式AC,答案比较简单:

//solution1:先归并合并,再求中位数	  public static double findMedianSortedArrays(int A[], int B[]) {        int[] C= mergeSortSub(A, B);        double result=0;        int n=C.length;                if(n%2==0)        {        	double m1=0.5*n-1;        	double m2=0.5*n;        	result = 0.5*(C[(int) m1]+C[(int) m2]);        }else {			result = C[(int) Math.round(0.5*n-1)];		}        return result;    }		 	private static int[] mergeSortSub(int[] arr1,int[] arr2){//归并排序子程序		if(arr1.length==0)		{			return arr2;		}		if(arr2.length==0)		{			return arr1;		}		int[] result = new int[arr1.length+arr2.length];		int i = 0;		int j = 0;		int k = 0;		while(true){			if(arr1[i] < arr2[j]){				result[k] = arr1[i];				if(++i>arr1.length-1){					break;				}			}else{				result[k] = arr2[j];				if(++j>arr2.length-1){					break;				}			}			k++;		}		for(;i

答案2就是参考的九章里面的解法,读懂然后过一段时间默写。

3,,题目大意就是找出一个字符串中不重复的最长子串。

这个比较简单,想清楚关键一点就是判断出重复后,从重复字符的下一索引继续开始,不要遗漏。

代码如下:

public class Solution3 {    public static int lengthOfLongestSubstring(String s) {        int len = s.length();        if(len==0)        {        	return 0;        }        String string = null;        String subString = null;        int maxLength = 0;        for(int i=0;i
maxLength) { maxLength = string.length(); } subString = null; }else  { int index = string.indexOf(subString); subString = string.substring(index+1)+subString; string = subString; if(string.length()>maxLength) { maxLength = string.length(); } subString = null; } }                 } return maxLength;    }        public static void main(String[] args) { String string = "dvdf"; int result = lengthOfLongestSubstring(string); System.out.println(result); }}

4,等待更新

转载于:https://my.oschina.net/u/181485/blog/384240

你可能感兴趣的文章
git reset 三种用法总结
查看>>
GO语言语法基础
查看>>
Android多任务断点续传下载
查看>>
viewpager的layout_width="wrap_content"无效问题
查看>>
ANDRO - MULTIPURPOSE OPENCART 2.X 自适应主题模板 ABC-0651
查看>>
Linux命令总结
查看>>
PMP 管理学6大定律之三(帕金森定律)
查看>>
新的起点
查看>>
对集合的理解
查看>>
企业应用安全认识初步
查看>>
select,iocp,epoll,kqueue及各种I/O复用机制
查看>>
网络的理解2
查看>>
flask中的url_for与render_template()函数
查看>>
PHP反射ReflectionClass、ReflectionMethod
查看>>
CSS定位元素--浮动与清除
查看>>
2016-09-14
查看>>
rsync工具
查看>>
json jsonp json跨域
查看>>
java.util.ConcurrentModificationException异常
查看>>
Linux下oracle自启动
查看>>