BM50两数之和
题目描述:给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
解题思路:
一般的暴力搜索思路在这里我们不做赘述,首先我们看到该题的返回值一定是一个长度为2
的int型数组,用来保存符合题意的元素的下标(注意:题目要求下标是从1开始的),所以我们创建一个数组,接下来我们创建一个hashmap用来映射数组中的元素与下标之间的关系,遍历题中给出的数组,如果target减去当前的元素可以在hashmap中找到那么这两个元素的下标一定是题目要求返回的结果,如果不是的话我们把当前的元素放入map即可,以防后面使用。
代码描述:
public int[] twoSum (int[] numbers, int target) {
int[] array = new int[2];
HashMap<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < numbers.length; i++) {
int num = target - numbers[i];
if(map.containsKey(num)){
array[0] = map.get(num) + 1;
array[1] = i + 1;
break;
}else{
map.put(numbers[i],i);
}
}
return array;
}
BM51 数组中出现次数超过一半的数字
题目描述:
给一个长度为 n