1题两数字和
题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
暴力解题法:
思想:遍历每个元素和其他元素相加的和,结果为target则返回
class Solution:
def twoSum(self
, nums
: List
[int], target
: int) -> List
[int]:
length
= len(nums
)
for i
in range(length
- 1):
for j
in range(i
+1, length
):
if nums
[i
] + nums
[j
] == target
:
return i
,j
public class doubleSum {
public int[] twoSum(int[] nums
, int target
) {
int[] result
= new int[2];
int length
= nums
.length
;
for(int i
= 0; i
< length
-1; i
++){
for(int j
= i
+ 1; j
< length
; j
++){
if(nums
[i
] + nums
[j
] == target
){
result
[0] = i
;
result
[1] = j
;
}
}
}
return result
;
}
public static void main(String
[] args
) {
int[] arr
= {3,6,8,5,9};
int target
= 8;
doubleSum ds
= new doubleSum();
System
.out
.println(Arrays
.toString(ds
.twoSum(arr
,target
)));
}
}
[0, 3]
Map:
import java
.util
.Arrays
;
import java
.util
.HashMap
;
import java
.util
.Map
;
public class doubleSum_1_1 {
public int[] twoSum(int[] nums
, int target
){
Map
<Integer,Integer> hashTable
= new HashMap<Integer, Integer>();
for (int i
= 0; i
< nums
.length
; i
++){
if (hashTable
.containsKey(target
- nums
[i
])){
return new int[]{hashTable
.get(target
- nums
[i
]), i
};
}
hashTable
.put(nums
[i
], i
);
}
return new int[0];
}
public static void main(String
[] args
) {
int[] arr
= {3,6,8,5,9};
int target
= 8;
doubleSum_1_1 ds11
= new doubleSum_1_1();
System
.out
.println(Arrays
.toString(ds11
.twoSum(arr
,target
)));
}
}
268缺失数字
sort:
题目: 给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。如果序列为[0,1,2]则返回末尾加一。
public class missingNumber_268_0 {
public int missingNumber(int[] nums
){
Arrays
.sort(nums
);
for (int i
= 0; i
< nums
.length
; i
++) {
if (i
!= nums
[i
]) {
return i
;
}
}
return nums
.length
;
}
public static void main(String
[] args
) {
int[] arr
= {3, 2, 0, 1};
missingNumber_268_0 mn
= new missingNumber_268_0();
System
.out
.println(mn
.missingNumber(arr
));
}
}
HashSet:
hashSet中的contains方法能够直接找出没有包含的元素
public class missingNumber_268_1 {
public int missingNumber(int[] nums
){
HashSet
<Integer> hs
= new HashSet<Integer>();
for (Integer h
: nums
) {
hs
.add(h
);
}
for (int i
= 0; i
< nums
.length
; i
++) {
if (!hs
.contains(i
)) {
return i
;
}
}
return nums
.length
;
}
public static void main(String
[] args
) {
int[] arr
= {3, 2, 0, 1, 5};
missingNumber_268_1 mn
= new missingNumber_268_1();
System
.out
.println(mn
.missingNumber(arr
));
}
}
最优解法 math (O(n)):
public class missingNumber_268_2 {
public int missingNumber(int[] nums
){
int len
= nums
.length
;
int sum
= 0;
for (int i
= 0; i
< nums
.length
; i
++){
sum
+= nums
[i
];
}
int number
= len
* (len
+ 1) / 2;
return number
- sum
;
}
public static void main(String
[] args
) {
int[] arr
= {0, 1, 2, 4, 3};
missingNumber_268_2 m2
= new missingNumber_268_2();
System
.out
.println(m2
.missingNumber(arr
));
}
}