算法面试题

1.经典两数之和

  给定一个整数数组nums,和一个目标值target,找出数组中两个数,使他们的和等于target,输出他们的下标。

java 复制代码
import java.util.HashMap;
public class Test{
	public static void main(String[] args){
		Test t = new Test();
		t.twoSum2();
	}
	
	void twoSum1(){
		int[] arr = {1,2,3,4,5,6,7,8,9};
		
		int target = 6;
		
		int index1=0;
		int index2=0;
		System.out.println("target="+target);
		for(int i=0;i<arr.length;i++){
			for(int j=i+1;j<arr.length;j++){
				if(arr[i]+arr[j]==target){
					index1=i;
					index2=j;
					System.out.printf("\n%d, %d", i, j);
					//System.out.println("index1="+index1+",value="+arr[index1]+", index2="+index2+",value="+arr[index2]);
				}
			}
		}
	}
	//1.用HasmMap存储值->下标
	//2.遍历数组,对每个数:
	//计算需要的补数
	//如果补数已经在map里面,直接输出map.get(complement), i
	//把当前num和下标i存入map
	void twoSum2(){
		int[] arr = {1,2,3,4,5,6,7,8,9};
		
		int target = 6;
		
		HashMap<Integer, Integer> map = new HashMap<>();
		
		for(int i=0;i<arr.length;i++){
			int num = target - arr[i];
			if(map.containsKey(num)){
				System.out.printf("\n%d, %d", i, map.get(num));
				//System.out.printf("\narr[%d]=%d, arr[%d]=%d",i,arr[i], map.get(num), num);
			}
			map.put(arr[i],i);
		}
	}
}
  • 方法1双重循环时间复杂度O(n^2)
  • 方法2哈希表解法,用空间换时间,只需要一重循环遍历,时间复杂度O(n),空间复杂度O(n)
相关推荐
学长毕设1 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw2 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
UIU1143 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
源码集结号3 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场3 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi3 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
啃瓜子的松鼠4 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David4 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放5 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友