1. 程式人生 > >Leetcode第一題詳解

Leetcode第一題詳解

先看題目要求:

    /**
     * <pre>
     * Given an array of integers, find two numbers such that they add up to a specific target number.
     * The function twoSum should return indices of the two numbers such that they add up to the target,
     * where index1 must be less than index2. Please note that your returned answers (both index1 and index2)
     * are not zero-based.
     * You may assume that each input would have exactly one solution.
     *
     * Input: numbers={2, 7, 11, 15}, target=9
     * Output: index1=1, index2=2
     *
     * 題目大意
     * 給定一個整數陣列,找出其中兩個數滿足相加等於你指定的目標數字。
     * 要求:這個函式twoSum必須要返回能夠相加等於目標數字的兩個數的索引,且index1必須要小於index2。

     * 請注意一點,你返回的結果(包括index1和index2)都不是基於0開始的。你可以假設每一個輸入肯定只有一個結果。

新手,所以首先想到是暴力:

package mypackage;
public class Solution {
public String twoSum(int a[],int target){
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
if(a[i]+a[j]==target&&i!=j){
return "兩個索引位置為  "+(i+1)+"   "+(j+1);
}
}
}
return "未找到這兩個索引";
}

}

package mypackage;

public class Main {
public static void main(String[] args) {
// TODO 自動生成的方法存根
int a[]={3,2,1,4,5,6};
int target=5;
Solution s=new Solution();
System.out.println(s.twoSum(a, target));
}

}

結果:兩個索引位置為  1   2

做完看別人的。。。

package remypackage;
import java.util.Arrays;
public class Solution {
public class Node implements Comparable<Node>{
private int val;
private int index;
public Node(int v,int i){
this.val=v;
this.index=i;
}
@Override
public int compareTo(Node o) {
return this.val-o.val;
}
}
public int[] twoSum(int a[],int target){
int[] result={0,0};
Node[] node=new Node[a.length];
for(int i=0;i<a.length;i++){
node[i]=new Node(a[i], i);
}
Arrays.sort(node);

int lowindex=0;
int highindex=a.length-1;

while(lowindex<highindex){
if(node[lowindex].val+node[highindex].val==target){
if(node[lowindex].index<node[highindex].index){
result[0]=node[lowindex].index+1;
result[1]=node[highindex].index+1;
}else{
result[0]=node[highindex].index+1;
result[1]=node[lowindex].index+1;
}
return result;
}else if(node[lowindex].val+node[highindex].val>target){
highindex--;
}else{
lowindex++;
}
}
return result;
}

}

package remypackage;
public class Main {
public static void main(String[] args) {
// TODO 自動生成的方法存根
int a[]={5,2,3,4,1,6};
int target=6;
Solution s=new Solution();
int result[]=s.twoSum(a, target);
System.out.println("["+result[0]+"  ,  "+result[1]+"  ]");
}

}

結果: [1  ,  5  ]

分析下 ,我的暴力沒啥說的,遍歷兩遍,他的思想應該是定義高低索引值來掃陣列,這樣陣列只被遍歷可能不到一遍,但這樣前提是有序,所以需要用個Arrays.sort排序,但排序後改變了原陣列資料的位置(因為最後要返回索引),就需要定義Node來記錄下原始資料的位置.其餘不懂或有錯的地方還請評論區留言噢。

相關推薦

Leetcode第一

先看題目要求:    /**     * <pre>     * Given an array of integers, find two numbers such that they add up to a specific target number.   

leetCode 1號, 兩數之和的key , python3三種方法實現

原題如下 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以

牛客網暑期ACM多校訓練營(第一場) J

牛客網J題在比賽時是通過率最高的一道題,但是這道題對於時間的複雜度要求比較高。在比賽的時候,很多隊伍提交的程式都以”執行超時“而結束。那就讓我們先來看看這道看似簡單的題。 Different Integers 題目描述 Given a sequence of integers

位元組跳動2018校招演算法方向(第一批)(程式設計

程式設計題1: P為給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其為“最大的”。求出所有“最大的”點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[0, 1e9) 內) 如下圖:實心點為

LeetCode算法之兩個數組的交集

for mage != 有助於 class 學習 ret arr hash 題目背景: 這個與我們高中時期學習的交集是一樣的,順便復習一下相關的數學知識有助於更好的理解。 交集的定義: 對於兩個集合A和B,定義A和B的交集為C,其中C={x|x屬於A且X屬於B},

leetcode第一

cau ont tar cnblogs code targe array have sam Given an array of integers, return indices of the two numbers such that they add up to a sp

POJ 3164 Command Network(最小樹形圖模板+

noop clu html 建立 eof std const temp pri http://poj.org/problem?id=3164 題意: 求最小樹形圖。 思路: 套模板。 引用一下來自大神博客的講解:http://www.cnblogs.co

leetcode第一算法

for div ret 重復利用 targe public num 給定一個整數數組 暴力 給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重復利用。 示例: 給定 nums = [2, 7, 11, 1

2018年藍橋杯B組c/c++ 第七

標題:螺旋折線 如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。 對於整點(X, Y),我們定義它到原點的距離dis(X, Y)是從原點到(X, Y)的螺旋折線段的長度。 例如dis(0, 1)=3, dis(-2, -1)=9 給出整點座標(X, Y),你能計算出di

2018年藍橋杯B組c/c++ 第九

標題:全球變暖 你有一張某海域NxN畫素的照片,".“表示海洋、”#"表示陸地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座

2018年藍橋杯B組c/c++ 第八

標題:日誌統計 小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是: ts id 表示在ts時刻編號id的帖子收到一個"贊"。 現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少於K個贊,小明就

2018年藍橋杯B組c/c++ 第六

標題:遞增三元組 給定三個整數陣列 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 請你統計有多少個三元組(i, j, k) 滿足: 1 <= i, j, k <= N Ai <

2018年藍橋杯B組c/c++ 第三

標題:乘積尾零 如下的10行資料,每行有10個整數,請你求出它們的乘積的末尾有多少個零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9

2018年藍橋杯B組c/c++ 第十

標題:乘積最大 給定N個整數A1, A2, … AN。請你從中選出K個數,使其乘積最大。 請你求出最大的乘積,由於乘積可能超出整型範圍,你只需輸出乘積除以1000000009的餘數。 注意,如果X<0, 我們定義X除以1000000009的餘數是負(-X)除以1000000

leetcode第一兩數之和python實現

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [

LeetCode第一:兩數之和

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [

leetcode第一:滑雪問題

Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給出。陣列的每個數字代表點的高度。下面是一個例子 1 2 3 4 5

軟考之網路管理員(包含2004-2018歷年真+課本教材講義+視訊教程)

軟考-網路管理員2004-2018歷年考試真題以及詳細答案(試題和答案分離的哦),同時含有最新課本教材、複習筆記、網路管理員視訊教程。持續更新後續年份的資料。請點贊!!請點贊!!!絕對全部貨真價實的資料!!! 全網最全,獨此一家,費心整理,希望各位同學順利通過考試!!! 網路管理員歷

軟考之初級程式設計師(包含1990-2018歷年真+課本教材+模擬試卷+視訊教程)

軟考-初級程式設計師1990-2018歷年考試真題以及詳細答案(試題和答案分離的哦),同時含有課本教材、模擬試卷、程式設計師視訊教程、考試知識點。持續更新後續年份的資料。請點贊!!請點贊!!!絕對全部貨真價實的資料!!!! 全網最全,獨此一家,費心整理,希望各位同學順利通過考試!!!

軟考之軟體設計師(包含05-18年真、高清教程、學習筆記)

費心整理出來的,希望對軟考的同學有幫助。包含: 1、二、三、四版設計師教程; 2、2005年到2018年曆年軟考設計師真題以及答案,包含上下午的哈; 3、軟體設計師學習筆記; 下載地址百度網盤 https://pan.baidu.com/s/1X6kla3Gx-Up9B-