先給出一個leetcode的已有答案,為什么上來直接給出答案,因為這個好多答案寫的都非常簡潔,不太易懂,還是建議先自己做,答案只是參考http://www.ninechapter.com/solutions/。
1,https://leetcode.com/problems/two-sum/,題目大意是給出一個無序的數組和一個目標值,假設數組里有且只有兩個數相加和目標值相等,按索引由小到大輸出這兩個數字的索引,從1開始索引。
思路:既然題目假設有兩個數a,b肯定相加得到目標值c,那么肯定有c-a存在于數組中,于是問題轉化成了如何高效檢查一個數組中是否包含某個值,在這里找到一些答案http://www.diguage.com/archives/112.html。于是采用先排序,然后用Arrays.binarySearch的方法,然后根據OJ提示的一些錯誤,修改幾下就好了。具體代碼如下,254ms,和九章以及其他解題答案不太一樣。
import?java.util.Arrays;
public?class?Solution1?{
leetcode題、public?static?int[]?twoSum(int[]?numbers,?int?target)
{
int[]?num?=?numbers.clone();
Arrays.sort(num);
int?size?=?num.length;
int[]?answers?=?new?int[2];
leetcode java?for(int?i=0;i
{
if(Arrays.binarySearch(num,?target-num[i])>0)
{
int?count=0,index1?=?0,index2=0;
for(int?j=0;j
leetcode第一題、{
if(numbers[j]==num[i]||numbers[j]==target-num[i])
{
count++;
if(count==2)
{
leetcode第三題?index2=j;
answers[0]?=?(index1
answers[1]?=?(index1>index2?index1:index2)+1;
break;
}
else
有效的java?{
index1=j;
}
}
}
}
leetcode第二題、}
return?answers;
}
public?static?void?main(String[]?args)
{
int[]?test?=?{-3,4,3,90};
leetcode4題、int?target?=?0;
int[]?result?=?{0,0};
result?=?twoSum(test,target);
System.out.println(result[0]+","+result[1]);
}
}
java、我先用第一種容易理解的方式AC,答案比較簡單:
//solution1:先歸并合并,再求中位數
public?static?double?findMedianSortedArrays(int?A[],?int?B[])?{
int[]?C=?mergeSortSub(A,?B);
double?result=0;
int?n=C.length;
leetcode題難嗎、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?{
leetcode能用java刷嗎、result?=?C[(int)?Math.round(0.5*n-1)];
}
return?result;
}
private?static?int[]?mergeSortSub(int[]?arr1,int[]?arr2){//歸并排序子程序
if(arr1.length==0)
leetcode題庫c++、{
return?arr2;
}
if(arr2.length==0)
{
return?arr1;
leetcode第一題都過不了,}
int[]?result?=?new?int[arr1.length+arr2.length];
int?i?=?0;
int?j?=?0;
int?k?=?0;
while(true){
java leetcode、if(arr1[i]?
result[k]?=?arr1[i];
if(++i>arr1.length-1){
break;
}
}else{
leetcode題目及答案、result[k]?=?arr2[j];
if(++j>arr2.length-1){
break;
}
}
k++;
leetcode航班調整java,}
for(;i
result[++k]?=?arr1[i];
}
for(;j
result[++k]?=?arr2[j];
}
return?result;
}
public?static?void?main(String[]?args)?{
int?A[]={1,2,3,4};
int?B[]={5,6,7,8};
double?result?=?findMedianSortedArrays(A,B);
System.out.println(result);
}
答案2就是參考的九章里面的解法,讀懂然后過一段時間默寫。
這個比較簡單,想清楚關鍵一點就是判斷出重復后,從重復字符的下一索引繼續開始,不要遺漏。
代碼如下:
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
{
subString?=?String.valueOf(s.charAt(i));
if(i==0)
{
string?=?subString;
subString?=?null;
}else
{
if(!string.contains(subString))
{
subString?=?string+subString;
string?=?subString;
if(string.length()>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,等待更新
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态