645. 错误的集合
class Solution {
public int[] findErrorNums(int[] nums) {
int[] array = new int[2];
Arrays.sort(nums);
array[1] = 1;
for(int i = 0;i < nums.length-1;i++){
if(nums[i+1]-nums[i] == 2){
array[1] = nums[i]+1;
}
if(nums[i]==nums[i+1]){
array[0] = nums[i];
}
}
if(nums[nums.length-1]!=nums.length){
array[1] = nums.length;
}
return array;
}
}
697. 数组的度
class Solution {
public int findShortestSubArray(int[] nums) {
HashMap<Integer,ArrayList<Integer>> hashmap = new HashMap<>();
int min = Integer.MAX_VALUE;
int max = 1;
ArrayList<Integer> list;
for(int i = 0;i < nums.length;i++){
if(!hashmap.containsKey(nums[i])){
list = new ArrayList<>();
list.add(i);
list.add(i);
list.add(1);
hashmap.put(nums[i],list);
}else{
list = hashmap.get(nums[i]);
list.set(1,i);
list.set(2,list.get(2)+1);
max = Math.max(max,list.get(2));
}
}
for(ArrayList<Integer> arr : hashmap.values()){
if(arr.get(2)==max){
min = Math.min(min,arr.get(1)-arr.get(0)+1);
}
}
return min;
}
}
448. 找到所有数组中消失的数字
在不使用额外空间且时间复杂度为O(n)的情况下完成
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
for(int i = 0;i < nums.length;i++){
if(nums[i]>0){
if(nums[nums[i]-1]>0){
nums[nums[i]-1] *= (-1);
}
}else{
if(nums[-nums[i]-1]>0){
nums[-nums[i]-1] *= (-1);
}
}
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0;i < nums.length;i++){
if(nums[i]>0){
list.add(i+1);
}
}
return list;
}
}
442. 数组中重复的数据
不用到任何额外空间并在O(n)时间复杂度
class Solution {
public List<Integer> findDuplicates(int[] nums) {
int n = nums.length+1;
for(int i = 0;i < n-1;i++){
nums[(nums[i]-1)%n] += n;
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0;i < n-1;i++){
if(nums[i]>2*n){
list.add(i+1);
}
}
return list;
}
}
41. 缺失的第一个正数
太顶了这个,代码五分钟,边界条件两小时QAQ
class Solution {
public int firstMissingPositive(int[] nums) {
int length = nums.length;
for(int i = 0;i < length;i++){
if(nums[i] > length || nums[i]<=0){
nums[i] = 0;
}
}
int m = length+1;
for(int i = 0;i < length;i++){
if(nums[i]%m>0){
nums[nums[i]%m-1] += m;
}
}
for(int i = 0;i < length;i++){
if(nums[i]<m){
return i+1;
}
}
return length+1;
}
}
- H 指数
class Solution {
public int hIndex(int[] citations) {
Arrays.sort(citations);
for(int i = citations.length;i>0;i--){
if(citations[citations.length-i]>=i && (i==citations.length || citations[citations.length-i-1]<=i)){
return i;
}
}
return 0;
}
}