给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int[] array) {
Map<Integer,Integer> counts=new HashMap<>();
int length =array.length;
for(int i=0;i<length;i++){
int count =counts.getOrDefault(array[i],0)+1;
if(count>length/2)
return array[i];
counts.put(array[i],count);
}
return 0;
}
}
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列
import java.util.*;
public class Solution {
public int[] twoSum (int[] numbers, int target) {
// write code here
Map<Integer,Integer> map =new HashMap<>();
for(int i=0;i<numbers.length;i++){
if(map.get(target-num[i])!= null)){
return new int[]{map.get(target-num[i])+1,i+1};
}
map.put(numbers[i],i);
}
return new int[]{0,0};
}
}
//暴力解法
public class Solution {
public int[] twoSum (int[] numbers, int target) {
for(int i=0;i<numbers.length;i++){
for(int j=i+1;j<numgers.length;j++){
if(numbers[i]+numbers[j]==target)
return new int[]{i+1,j+1};
}
}
return new int[]{0,0};
}
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array.length==0||array[0]>k||array[array.length-1]<k){
return 0;
}
int left =0;
int right=array.length-1;
int count =0;
int found =0;
int mid=-1;
while(left<right){
mid=(left+right)/2;
if(array[mid]>k){
right=mid-1;
}else if(array[mid]<k){
left =mid+1;
}else{
count++;
found=mid;
break;
}
}
int left_ =mid-1;
int right_=mid+1;
while(left_>=left){
if(array[left_]==k){
count++;
left_--;
}else{
break;
}
}
while(right_<=right){
if(array[right_]==k){
count++;
right_--;
}else{
break;
}
}
return count;
}
}
给定一个长度为 nn 的无序数组 AA ,包含正数、负数和 0 ,请从中找出 3 个数,使得乘积最大,返回这个乘积