1.求一个数组中两个只出现一次的数
public static void fun(int[] arr) {
int xor = 0,xor1 = 0,xor2 = 0,pos = 0;
for(int i = 0;i < arr.length;i++){
xor = xor ^ arr[i];
}
for (int i = 0; i < 32; i++) {
if (1 == ((xor >> i) & 1)) {
pos = i;
break;
}
}
for (int i = 0; i < arr.length; i++) {
if (1 == ((arr[i] >> pos) & 1)) {
xor1 = xor1 ^ arr[i];
}
else {
xor2 = xor2 ^ arr[i];
}
}
System.out.println(xor1 + " " + xor2);
}
public static void main(String[] args) {
int[] arr = {1,4,2,5,2,1,6,5};
fun(arr);
}
2.求连续子数组的最大和
public static int fun4(int[] arr) {
int max = 0x80000000;
int sum = 0;
for(int i = 0;i < arr.length;i++){
sum = sum + arr[i];
if(sum < arr[i]){
sum = arr[i];
}
if(sum > max){
max = sum;
}
}
return max;
}
public static void main(String[] args) {
int[] arr = {1,-2,3,10,-4,7,2,-5};
int a = fun4(arr);
System.out.println(a);
}
3.输入一个数字,在数组中找到和为这个数字的两个数
public static int[] fun5(int[] arr,int key) {
int[] arr2 = {-1,-1};
int l = 0,h = arr.length-1;
for(int i = 0;i < h;i++){
if(arr[l] + arr[h] < key){
l++;
}
if(arr[l] + arr[h] > key){
h--;
}
if(arr[l] + arr[h] == key){
arr2[0] = l;
arr2[1] = h;
}
}
return arr2;
}
public static void main(String[] args) {
int[] arr = {4,6,7,8,10};
Scanner scanner = new Scanner(System.in);
int key = scanner.nextInt();
int[] arr2 = fun5(arr,key);
System.out.println(arr2[0] + " " + arr2[1]);
System.out.println(Arrays.toString(arr2));
}