力扣简单题(Java)1-2:
第一题: 数组之和
题目简介: 给定一个数组[2,7,11,15]和一个整数目标值9,需要找出该数组中"和为整数目标值"的"两个"整数,并且要输出它们两个的下标
方法一: 暴力破解
因为给定的数组的数据很少并且每个数不会被用两边,我们可以遍历数组中的每一个数x,然后找到两个数相加等于整数目标值即可
public class Solution{
public int[] twoSum(int[] nums, int target){
//将数组的长度赋值给一个变量
int len = nums.length;
//用for循环枚举所有可能的组合
for(int i = 0; i < len - 1; i++){
for(int j = i + 1; j < len; j++){
//找到两个数后组成一个新数组然后输出即可
if(num[i] + num[j] == target){
return new int[](i, j);
}
}
}
//因为输出的一定有一个答案,所以必须抛一个异常或者返回任意一个数组即可
throw new IllegalArgumentException("No two sum solution");
}
}
方法二: 查找表法
因为是整数目标值的值是固定的,所以我们可以通过整数目标值来减去其中一个元素得到另一个元素;
查找表法通常有两种实现方式:一种是哈希表,一种是平衡二叉搜索树;
因为我们不需要维护需要查找的表中的顺序性,因此使用哈希表
public class Solution{
public int[] twoSum(int[] nums, int target){
//将数组的长度赋值给一个变量
int len = nums.length;
//初始化哈希表,指定哈希表的容量,避免需要扩容带来的性能消耗
Map<Integer, Integer> hashMap = new HashMap<>(len - 1);
//因为第一个数据肯定没有其他数据与之对应,直接将其存入哈希表
hashMap.put(nums[0], 0);
//从下标为1的元素开始遍历
for(int i = 1;i < len; i++){
//每一次遍历都检查一遍是否存在整数目标值来减去其中一个元素得到另一个元素
int another = target - nums[i];
if(hashMap.containsKey(another)){
//如果存在返回两个值的下标
return new int[]{i, hashMap.get(another)};
}
//如果不存在就将这个值及其下标存入哈希表
hashMap.put(nums[i], [i]);
}
//因为输出的一定有一个答案,所以必须抛一个异常或者返回任意一个数组即可
throw new IllegalArgumentException("No two sum solution");
}
第二题: 整数反转
题目简介:给一个数,返回该数反转后的结果,如果反转的数超出了32位的有符号整数的范围,就返回0
class Solution {
public int reverse(int x) {
int ans = 0;
//判断给出的x
while(x != 0){
if ((ans * 10) / 10 != ans) {
ans = 0;
break;
}
ans = ans * 10 + x % 10;
x = x / 10;
}
return ans;
}
以上解题思路均非本人思路