`
zengshaotao
  • 浏览: 754519 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

归集数组数据,求数组数据加和为固定值

 
阅读更多

package web;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

public class FindPlusEqFix {

 

public static void main(String args[]) {

 

int arr[] = { 4, -1, 5, -4, 7, 9, 8, -3, 6, 3 };

 

//int sum = 8;

 

//getRes(arr, sum);

 

//System.out.println(getResult(arr, sum));

 

 

 

for (int j = 0; j < arr.length; j++) {

System.out.print(arr[j] + "\t");

}

System.out.println();

insertSort(arr);

}

 

// 求数组里任意两数相加为一固定值的数

public static void getRes(int[] arr, int sum) {

int arrLen = arr.length;

for (int i = 0; i < arrLen; i++) {

int temp = sum - arr[i];

for (int j = 0; j < arrLen; j++) {

int res = arr[j];

if ((res == temp) && (arr[i] != temp)) {

System.out.println(res);

}

}

}

}

 

// 求数组里任意两数相加为一固定值的数.这里是空间换时间

public static Map<Integer, Integer> getResult(int[] values, int sum) {

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

if (values == null || values.length == 0 || values.length == 1)

return map;

List<Integer> list = new ArrayList<Integer>();

for (int value : values) {

list.add(value);

}

for (int value : values) {

int result = sum - value;

if (!list.contains(result))

continue;

int key = value <= result ? value : result;// 把数组小的值作为key

int val = value > result ? value : result;// 把数组大的值作为value

map.put(key, val);

}

return map;

}

 

// 找一个数组重复的数

private static int getResult2(int[] values) {

if (values == null || values.length == 0) {

throw new RuntimeException("数组不能为空");

}

Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();

for (int value : values) {

if (map.get(value) != null && map.get(value) == true) {

return value;

} else {

map.put(value, true);

}

}

throw new RuntimeException("不能存在重复数字");

}

 

// 负数一块,正数一块,相对位置不变

private static Integer[] getResult(Integer[] values) {

if (values == null || values.length == 0 || values.length == 1)

return values;

List<Integer> leftList = new ArrayList<Integer>();

List<Integer> rightList = new ArrayList<Integer>();

for (Integer value : values) {

if (value <= 0) {

leftList.add(value);

} else {

rightList.add(value);

}

}

leftList.addAll(rightList);

return leftList.toArray(new Integer[0]);

}

 

static void insertSort(int arr[]) {

int minus = -1, plus = -1;

int tmp = 0;

for (int i = 0; i < arr.length; i++) {

if (minus == -1) {

if (arr[i] < 0 && plus >= 0) {

minus = i;// 用来寻找第一个负数

}

 

if (arr[i] > 0 && plus < 0) {

plus = i;// 用来寻找第一个正数

}

}

 

if (minus >= 0 && plus >= 0)// 都找到之后进行交换

{

tmp = arr[plus];

arr[plus++] = arr[minus];

for (int k = minus; k > plus; k--) {

arr[k] = arr[k - 1];

}

arr[plus] = tmp;

minus = -1;

 

//每次排完序,就打印一下结果

for (int j = 0; j < arr.length; j++) {

System.out.print(arr[j] + "\t");

}

System.out.println();

}

 

 

}

}

 

}

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics