求一个算法

xxg2810 2010-04-07 03:40:39
给出一个数组,输出这个数组各个值在数组中的大小顺序。
例如arr[5]={3,5,3,7,4}
输出{1,2,1,4,3}
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
无聊司马 2010-04-08
  • 打赏
  • 举报
回复
简单的算法 好像没有考虑到数组里有重复的元素
import java.util.*;
public class Testindex{
public static void main(String[] args){
int []a={3,5,1,7,4};
int []b=new int[5];
int h;
System.arraycopy(a, 0, b,0,a.length);
int m=b.length;
int k;
int temp=0;
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length-1;j++){
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
System.out.println("");
/*for(k=0;k<a.length;k++){
System.out.print(a[k]+" ");
}
System.out.println("");*/

for(h=0;h<m;h++){
for(k=0;k<a.length;k++){
if(b[h]==a[k]){
int x=k+1;
System.out.print(x+" ");
}
}
}
}
}
luokuo 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wpooh 的回复:]
Java code

import java.util.*;
class test
{
public static void main(String[] args){
int a[]={3,5,3,7,4};
int i,j,k;
int b[]=new int[5];
int c[]=new int[5];
……
[/Quote]

学习了
xxg2810 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wpooh 的回复:]

Java code

import java.util.*;
class test
{
public static void main(String[] args){
int a[]={3,5,3,7,4};
int i,j,k;
int b[]=new int[5];
int c[]=new int[5];
S……
[/Quote]
很聪明 很聪明
xxg2810 2010-04-08
  • 打赏
  • 举报
回复
谢谢上面的好心人们,让我好好拜读一下
WPooh 2010-04-07
  • 打赏
  • 举报
回复

import java.util.*;
class test
{
public static void main(String[] args){
int a[]={3,5,3,7,4};
int i,j,k;
int b[]=new int[5];
int c[]=new int[5];
System.arraycopy(a, 0, b,0,a.length);
Arrays.sort(b);
k=b.length;
for(i=0;i<k;++i){
if(b[i]==b[i+1]&&(i+1)<k){
for(j=i+1;j<k;++j){
b[j-1]=b[j];
}
k--;i--;
}
}
for(i=0;i<a.length;++i){
for(j=0;j<k;++j){
if(a[i]==b[j]) {c[i]=j+1;break;}
}
}
for(i=0;i<a.length;++i){
System.out.println(a[i]+"--> pos["+c[i]+"]");
}
}
}
13兄 2010-04-07
  • 打赏
  • 举报
回复
package test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {3,5,3,7,4}; //原数组
int[] newArr = arr.clone(); //克隆一个
int[] position = new int[arr.length]; //要输出的位置数组
Map map = new HashMap();

//对数组由小到大排序
for(int i = 0; i < newArr.length; i++){
int temp;
for(int j = i + 1; j < newArr.length; j++){
if (newArr[i] > newArr[j]) {
temp = newArr[i];
newArr[i] = newArr[j];
newArr[j] = temp;
}
}
}

//把排序后的数组去重,保存到MAP中
int j = 1;
for(int i = 0; i < newArr.length; i++){

if (i == 0) {
map.put(newArr[i], j);
j++;
} else {
if (newArr[i] != newArr[i-1]) {
map.put(newArr[i], j);
j++;
}
}

}

//把原数组与map中的键比较,一致的就保存map的值到position数组中
Set set = map.keySet();
for (int i = 0 ; i < arr.length; i++) {
Iterator it = set.iterator();
while (it.hasNext()) {
int k = (Integer)it.next();
if (arr[i] == k) {
position[i] = (Integer) map.get(k);
break;
}
}
}

for (int i = 0 ; i < position.length; i++) {
System.out.println(position[i]);
}
}

}
keeya0416 2010-04-07
  • 打赏
  • 举报
回复
用的是空间换时间,这个代码中的数组必须是正整数;
如果有负数 或 数组中有的值非常大
就得用别的方法了
常规方法的时间复杂度是 O(n*logn)
而本例中的时间复杂度是 O(n)

package com.keeya.csdn.test;

public class GetValuesArray {

public static void main(String[] args) {
int[] arr = { 3, 5, 3, 7, 4 };
int[] v = arrTheValues(arr);
for(int i = 0; i < v.length; i++){
System.out.print(v[i] + " ");
}
}

public static int[] arrTheValues(int[] arr) {
int[] values = new int[getMaxOfArray(arr) + 1];
int[] arrValuesArray = new int[arr.length];
int temp = 0;
for (int i = 0; i < arr.length; i++) {
values[arr[i]] = 1;
}
for (int j = 0; j < values.length; j++) {
if (values[j] == 0) {
temp++;
} else {
values[j] = j + 1 - temp;
}
}
for (int m = 0; m < arr.length; m++) {
arrValuesArray[m] = values[arr[m]];
}
return arrValuesArray;
}

private static int getMaxOfArray(int[] arr) {
if (arr == null)
return -1;
int temp = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > temp) {
temp = arr[i];
}
}
return temp;
}
}

keeya0416 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 xxg2810 的回复:]
给出一个数组,输出这个数组各个值在数组中的大小顺序。
例如arr[5]={3,5,3,7,4}
输出{1,2,1,4,3}是{1,3,1,4,2}吧?
[/Quote]
mark 现在去写
jacky花园 2010-04-07
  • 打赏
  • 举报
回复
最笨的办法:
先排序
再按位置输出下标
(当数值相同时,考虑先后顺序)
xxg2810 2010-04-07
  • 打赏
  • 举报
回复
不难阿,哪位帮帮我

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧