我先来一个,题目没有标准答案,仁者见仁,智者见智,一起学习交流~~~public class Arrays {
public static int seqSearch(int[] arr, int first, int last, int target) {
// 在[first,last)的范围内遍历数组,如果有值与target匹配,则返回索引值,
// 否则返回-1
for (int i = first; i < last; i++)
if (arr[i] == target)
return i;
// 如果没有return,没有匹配成功,则返回-1
return -1;
}
public static boolean isUnique(int []arr,int target){ //判断一个数是否为独立数
int index=Arrays.seqSearch(arr, 0, arr.length, target);
//找到这个数的第一个索引,这个数必定存在,因为它本来就是这个数组里的一个数
int index1=Arrays.seqSearch(arr, index+1, arr.length, target);
//看看是否存在第二个这样的数,如果存在,则不是独立数,否则是独立数
if(index1==-1)
return true;
return false;
}
public static int numUnique(int []arr){ //求出一个数组里的独立数个数
int uniqueNum=0; //定义一个累加器
for(int i=0;i<arr.length;i++) //依次遍历
if(Arrays.isUnique(arr, arr[i]))
uniqueNum++;
return uniqueNum;
}
public static void main(String args[]){ //测试
int []intVals={3,1,5,1,9,5,7,2,3,8,4};
System.out.println(numUnique(intVals));
}
}
public static int seqSearch(int[] arr, int first, int last, int target) {
// 在[first,last)的范围内遍历数组,如果有值与target匹配,则返回索引值,
// 否则返回-1
for (int i = first; i < last; i++)
if (arr[i] == target)
return i;
// 如果没有return,没有匹配成功,则返回-1
return -1;
}
public static boolean isUnique(int []arr,int target){ //判断一个数是否为独立数
int index=Arrays.seqSearch(arr, 0, arr.length, target);
//找到这个数的第一个索引,这个数必定存在,因为它本来就是这个数组里的一个数
int index1=Arrays.seqSearch(arr, index+1, arr.length, target);
//看看是否存在第二个这样的数,如果存在,则不是独立数,否则是独立数
if(index1==-1)
return true;
return false;
}
public static int numUnique(int []arr){ //求出一个数组里的独立数个数
int uniqueNum=0; //定义一个累加器
for(int i=0;i<arr.length;i++) //依次遍历
if(Arrays.isUnique(arr, arr[i]))
uniqueNum++;
return uniqueNum;
}
public static void main(String args[]){ //测试
int []intVals={3,1,5,1,9,5,7,2,3,8,4};
System.out.println(numUnique(intVals));
}
}
解决方案 »
- 求大神解答,如何解决以下问题
- 如何在一个JList控件里单独接收每个List项的鼠标操作
- 再次询问SWING 中的窗口关闭销毁问题~急急急
- 关于标准输入system.in如何具体实现的
- 收集了好几年的JAVA编程资料,大家给个评价先!
- 请教如何在abstract类前面加上synchronized?
- Java初学者提问:有前辈能告诉小生一个Java程序的标准框架吗?
- Eclipse添加JavaMail+JAF出现的怪问题!
- 哪位大侠有JNDI的教程,分小弟一份吧,另问,我的可用分怎么不涨了,不是每天加10吗?
- 构造器
- 关于Jtable编辑后保存的问题?????
- 正则表达式对一串数字如何匹配其中没有某个数字的
{ public static void main(String[] args)
{
int[] intVals = {3, 1, 5, 1, 9, 5, 7, 2, 3, 8, 4};
System.out.println(singleNum(intVals));
} public static int singleNum(int[] num)
{
int flag = 0, sum = 0;
for (int a : num)
{
for (int i = 0; i < num.length; i++)
{
if (num[i] == a)
{
flag++;
}
}
if (1 == flag)
{
sum++;
}
flag = 0;
}
return sum; }
}
public class Single{
public static void main(String args[]){
Int [] temp = {1,2,3,5,2,4,6,2,5,3,2,4};
temp = getnums(temp); } private Int[] getnums(int[] temp ){
String s = temp.toString();
str = str.replaceAll("(?s)(.)(?=.*\\1)", ""); } }
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;public class Test {
public static void main(String args[]) {
int[] intVals = { 3, 1, 5, 1, 9, 5, 7, 2, 3, 8, 4 };
System.out.println("非独立数:" + Arrays.toString(getNums(intVals)));
} private static int[] getNums(int[] intVals) {
Set<Integer> allSet = new HashSet<Integer>();
Set<Integer> repeatSet = new HashSet<Integer>();
for (int i : intVals) {
if (!allSet.add(i)) {
repeatSet.add(i);
}
}
allSet.removeAll(repeatSet);
int[] result = new int[allSet.size()];
Integer[] temp = allSet.toArray(new Integer[allSet.size()]);
for (int i = 0; i < result.length; i++) {
result[i] = temp[i];
}
return result;
}
}
这就是Java区处C++区的区别。
public class Dulishu {
private int count=0;//计数器,计算有多少个非独立数
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
/**
* 计算非独立数个数
* @param d
*/
public void findDulishu(int d[]){
for(int i = 0; i < d.length; i++){
for(int j = i+1; j < d.length; j++){
//判断是否是非独立数
if(d[i] == d[j]){
// System.out.println("相等的数是: " + d[j]);
count++;//是,计数器加1
break;//是,跳出此循环
}
}
}
}
public static void main(String[] args){
Dulishu dulishu = new Dulishu();
int []intVals={3,1,5,1,9,5,7,2,3,8,4};
int count;
dulishu.findDulishu(intVals);
// System.out.println("intVals length is : " + intVals.length);
count = intVals.length - dulishu.getCount();//计算有多少独立数
// System.out.println("dulishu count is : " + dulishu.getCount());
System.out.println("intVals 中独立数个数是: " + count);
}
}
int []intVals={3,1,5,1,9,5,7,2,3,8,4};
int flag = 0;
int count = 0;
for(int i=0;i<intVals.length;i++){
for(int j=0;j<intVals.length;j++){
if(intVals[i]==intVals[j]){
flag ++;
}
if(flag >=2){
break;
}
}
if(flag < 2){
count++;
}
flag = 0;
}
System.out.println(count);
这感觉这样做没效率呀。
int[] intVals = {3, 1, 5, 1, 9, 5, 7, 2, 3, 8, 4};
int size = intVals.length;
List[] judge = new List[size];
int count = 0; //记录独立数的个数
for (int i = 0; i < intVals.length; i++) {
int index = intVals[i] % size;
if(judge[index] == null){
judge[index] = new ArrayList<Integer>();
judge[index].add(intVals[i]);
count++;
}
else{
int sameIndex = 0;
for (int j = 0; j < judge[index].size(); j++) {
if(intVals[i] == (Integer)(judge[index].get(j))){
count--;
sameIndex = 1;
break;
}
}
if(sameIndex == 0){
count++;
}
}
}
System.out.println("记录独立数的个数: " +count);
[/code]
int [] a={3,1,5,1,9,5,7,2,3,8,4};
int [] b=new int [a.length];
for(int index:a)
{
b[index]++;
}
int index=0;
do
{
if(b[index]==1)
System.out.println("This is XXX number :"+index);
index++;
}while(index<a.length);
int [] a={3,1,5,1,9,5,7,2,3,8,4};
int [] b=new int [a.length];
for(int index:a)
{
b[index]++;
}
int index=0;
do
{
if(b[index]==1)
System.out.println("This is XXX number :"+index);
}while(++index<a.length);
int []intVals={3,1,5,1,4,3,4,5,9};
Set set=new HashSet();
int length=intVals.length;
int temp=length;
int num=0;
int setLength=0;
for(int i=0;i<length;i++)
{
setLength=set.size();
set.add(intVals[i]);
if(set.size()==setLength)
{
num=temp-2;
temp=temp-2;
}
}
System.out.println(num);
}
想法不错,不过没考虑周全
如果是这样呢? int [] a={100,1,5,1,9,5,7,2,3,8,4}楼主在坛子里搜一下,会找到好答案的
import java.util.Map;public class Test1 {
public static void main(String[] args) { int[] temp = {1,2,3,4,2,3,1,34,4,3,42,345,3,6};
System.out.println(Test1.getOneS(temp));
}
public static int getOneS(int[] values){
int num = 0;
Map<String,Integer> map = new HashMap<String,Integer>();
for(int temp:values){
String srttemp = "" + temp;
map.put(srttemp, map.get(srttemp) == null?new Integer(1):map.get(srttemp) + 1);
}
for(String sKey:map.keySet()){
if(map.get(sKey).intValue() == 1) num++;
}
return num;
}
}
//最笨的循环
public void GetCount() {
int[] intVals={3,1,5,1,9,5,7,2,3,8,4};
for (int i = 0,count=0; i < intVals.length; i++,count=0) {
for (int j = 0; j < intVals.length; j++) {
if (intVals[i]-intVals[j]==0)
{
count++;
}
}
if (count==1) {
System.out.println("独立数:"+intVals[i]);
}
}
}
List list = new LinkedList();
Set set = new TreeSet();
for(int i=0;i<a.length;i++){
int value = a[i];
String valString = String.valueOf(value);
if(!list.contains(valString)){
list.add(valString);
}else{
set.add(valString);
}
}
return list.size()-set.size();
}不知道这样的效率如何。
我验正了一下,发现还是下面这种方法快点。int flag = 0;
int count = 0;
for(int i=0;i<intVals.length;i++){
for(int j=0;j<intVals.length;j++){
if(intVals[i]==intVals[j]){
flag ++;
}
if(flag >=2){
break;
}
}
if(flag < 2){
count++;
}
flag = 0;
}
System.out.println(count);使用的测试数据。int []intVals={3,1,5,1,9,5,7,2,3,8,4,10,22,199,10,20,32,
32,34,56,19,22,100,29,14,3,5,7,122,0,90,34,29,
199,324,85,33,100,22,33,44,55,66,77,88,99,100
,122,23,21,31,41,51,66,77,100,1000,200,133,33,99};
我觉得在第二个循环里面有时不需要循环a.lengh次,因为有重复就可以跳出这个循环开始外面的下一次的循环。