# LeetCode初级算法题：两数之和+斐波拉契数列多种java解法

## 1 两数之和

### 解题思路与代码

#### 暴力解法：

    public int[] twoSum(int[] nums, int target) {
int n = nums.length;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return new int[0];
}


    public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; ++i) {
if (map.containsKey(target - nums[i])) {
return new int[]{map.get(target - nums[i]), i};
}
map.put(nums[i], i);
}
return new int[0];
}


#### 解法一：二分查找

    public int[] twoSearch(int[] numbers, int target) {
for (int i = 0; i < numbers.length; ++i) {
int low = i, high = numbers.length - 1;
while (low <= high) {
int mid = (high - low) / 2 + low;
if (numbers[mid] == target - numbers[i]) {
return new int[]{i, mid};
} else if (numbers[mid] > target - numbers[i]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
}


#### 解法二：双指针

    public int[] twoPoint(int[] numbers, int target) {
int low = 0, high = numbers.length - 1;
while (low < high) {
int sum = numbers[low] + numbers[high];
if (sum == target) {
return new int[]{low + 1, high + 1};
} else if (sum < target) {
++low;
} else {
--high;
}
}
return new int[]{-1, -1};
}


## 2 斐波那契数列

### 解题思路与代码

#### 解法一：暴力递归

    public static int calculate(int num){
if(num == 0 ){
return 0;
}
if(num == 1){
return 1;
}
return calculate(num-1) + calculate(num-2);
}


#### 解法二：去重递归

    public static int calculate2(int num){
int[] arr = new int[num+1];
return recurse(arr,num);
}
private static int recurse(int[] arr, int num) {
if(num == 0 ){
return 0;
}
if(num == 1){
return 1;
}
if(arr[num] != 0){
return arr[num];
}
arr[num] = recurse(arr,num-1) + recurse(arr,num-2);
return arr[num];
}



#### 解法三：双指针迭代

 public static int iterate(int num){
if(num == 0 ){
return 0;
}
if(num == 1){
return 1;
}
int low = 0,high = 1;
for(int i=2; i<= num; i++){
int sum = low + high;
low = high;
high = sum;
}
return high;
}


|
29天前
|

43 1
|
23天前
|

30 1
|
13天前
|

【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中，策略模式是一种常用的行为型模式，允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现，使算法的变化与客户端分离。例如，在电商系统中，可以通过定义 DiscountStrategy 接口和多种折扣策略类（如 FidelityDiscount、BulkDiscount 和 NoDiscount），在运行时动态切换不同的折扣逻辑。这样，ShoppingCart 类无需关心具体折扣计算细节，只需设置不同的策略即可实现灵活的价格计算，符合开闭原则并提高代码的可维护性和扩展性。
33 2
|
21天前
|

java系列之~~网络通信安全 非对称加密算法的介绍说明

31 4
|
1月前
|

LeetCode经典算法题：打家劫舍java详解
LeetCode经典算法题：打家劫舍java详解
40 2
|
1月前
|

LeetCode经典算法题：井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题：井字游戏+优势洗牌+Dota2参议院java解法
35 1
|
22天前
|

【高手进阶】Java排序算法：从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用，让你的代码效率飙升！
【8月更文挑战第21天】Java排序算法是编程基础的重要部分，在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法，包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序，并提供了每种算法的Java实现示例。此外，还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用，帮助读者更好地理解和应用这些算法。
15 0
|
7天前
|

37 20
|
7天前
|

39 19
|
30天前
|

39 7