LeetCode1-兩數之和【Java實作】
文章目錄
- 題目詳情
- 二、題目分析
- 1.選擇Java檔案實作,題目要求寫一個twoSum函式,函式引數為(int[] nums, int target);并且回傳一個int[]型別的陣列,
- 2.添加一個輔助函式:public int contains(int[] data, int e,int m)
- 總結
- LeetCode運行結果截圖
- 輔助測驗代碼,方便大家學習
題目詳情
給定一個整數陣列 nums 和一個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,并回傳它們的陣列下標,你可以假設每種輸入只會對應一個答案,但是,陣列中同一個元素不能使用兩遍,
你可以按任意順序回傳答案,
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/two-sum
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
# 輸入與輸出案例
示例一:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,回傳 [0, 1] ,
示例二:
輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例三:
輸入:nums = [3,3], target = 6
輸出:[0,1]
二、題目分析
1.選擇Java檔案實作,題目要求寫一個twoSum函式,函式引數為(int[] nums, int target);并且回傳一個int[]型別的陣列,
代碼如下(示例):
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
int[] result = new int[2];
for (int i = 0; i < len; i++) {
if(Math.abs(nums[i]) <= Math.abs(target) && target != 0){
result[0] = i;
int m = contains(nums, target - nums[i],i+1);
if(m != -1 ){
result[1] = m;
break;
}
}
if(Math.abs(nums[i]) <= Math.abs(target) || target == 0 || nums[i] <= target){
result[0] = i;
int m = contains(nums, target - nums[i],i+1);
if(m != -1 ){
result[1] = m;
break;
}
}
if(nums[i] > target){
result[0] = i;
int m = contains(nums, target - nums[i],i+1);
if(m != -1 ){
result[1] = m;
break;
}
}
}
return result;
}
2.添加一個輔助函式:public int contains(int[] data, int e,int m)
contains函式 : 從索引值為m的陣列值開始遍歷到陣列末尾,找尋是否存在與e相等的陣列值,若存在回傳其索引值,若不存在回傳值-1.
代碼如下(示例):
public int contains(int[] data, int e,int m){
int index = -1;
for (int i = m; i < data.length; i++) {
if(data[i] == e)
index = i;
}
return index;
}
總結
這是筆者第一次在LeetCode上解答出相關的編程題,同時也是第一次創作相關的CSND博文,肯定存在很多的不足之處,望大家多多指教,筆者也會持續更新博文與改進代碼,以期待降低空間復雜度,
LeetCode運行結果截圖


輔助測驗代碼,方便大家學習
一下是我在Intellij IDEA上用的測驗代碼,包含主函式Main與一個用于列印輸出的函式,方便大家學習與測驗自己的代碼, 注釋部分是另外的幾個測驗用例,如果能通過所有的用例,這道題就基本被破解了,
public static void main(String[] args) {
// int[] nums = new int[]{2,7,11,9};
// int target = 9; // 輸出結果[0,1]正確
// int[] nums = new int[]{};
// int target = ;
//
// int[] nums = new int[]{3,2,4};
// int target = 6; // 輸出[1,2]正確
// int[] nums = new int[]{3,3};
// int target = 6; // 輸出[0,1]正確
// int[] nums = new int[]{2,7,11,15};
// int target = 9;
// int[] nums = new int[]{0,4,3,0};
// int target = 0;
// int[] nums = new int[]{-1,-2,-3,-4,-5};
// int target = -8;
// int[] nums = new int[]{-3,4,3,90};
// int target = 0;
// int[] nums = new int[]{-10,7,19,15};
// int target = 9;
int[] nums = new int[]{3,2,95,4,-3};
int target = 92;
int[] ints = twosum(nums, target);
Arrayprint(ints);
}
public static void Arrayprint(int[] Arrays){
System.out.print("[");
for (int i = 0; i < Arrays.length; i++) {
if(i != Arrays.length - 1)
System.out.print(Arrays[i]+",");
else
System.out.println(Arrays[i]+"]");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267077.html
標籤:java
上一篇:類和物件——登堂入室
