int b=0;
for(int i=1;i<a.length;){
if(a[b]==a[i]){
b=i+1;
i+=2;
}else
i++;
}
if(b>=a.length)
System.out.println("没找到");
else
System.out.println("数是"+a[b]);
for(int i=1;i<a.length;){
if(a[b]==a[i]){
b=i+1;
i+=2;
}else
i++;
}
if(b>=a.length)
System.out.println("没找到");
else
System.out.println("数是"+a[b]);
解决方案 »
- JAVA 反射 获取成员变量的顺序
- SWT JFace问题 高分求解 谢谢
- InstallAnywhere 8 Enterprise 如何打包程序中的参数
- 关于运行时出乱码的事?????
- 有个java的算法问题?
- 请教jni中:cl -Ic:\jdk\include -Ic:\jdk\include\win32 -LD Sample1.c -FeSample1.dll???不是内部命令??
- InstallShield可以安装JSP应用程序吗?
- java中怎样从一个文件的最后面,一行一行的往前读数据?
- 关于Inner class
- 关于时间比较的问题?
- 如何在点击窗口那个叉叉关闭的时候跳出消息框?
- 我的意思就是在.net中还有没有支持JAVA的平台,以前VS6.0中不是有一个vj++是写JAVA程序的平台吗?
public static int getLittle(int ex[]) {
int temp = ex[0];
//如果是第一个的话
if (ex[0] < ex[1]) {
return ex[0];
}
//在第二个到倒数第二个中找
for (int i = 1; i < ex.length - 1; i++) {
if (ex[i] != ex[i + 1] && ex[i] > ex[i - 1]) {
return ex[i];
}
}
//再看看是不是最后一个了
if (ex[ex.length - 2] < ex[ex.length - 1]) {
return ex[ex.length - 1];
} else {
System.out.println("找不到符合要求的数");
return 999999;
}
}
//表态方法,用于测试
public static void main(String[] args) {
int a[] ={3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11 };
System.out.println(getLittle(a));
}
逻辑就是上面代码中的,从第一个开始,到最后一个,都搜索一遍了,没有什么技巧,但实用。
if (a.length <= 0) {
return "not found";
}
if (a.length == 1||(a.length>1&&a[0]!=a[1])) {
return String.valueOf(a[0]);
}
if (a.length == 2) {
return a[a.length - 1] == a[a.length - 2] ? "not found" :
String.valueOf(a[a.length - 2]);
}
for (int i = 2; i < a.length - 1; i++) {
if (a[i] != a[i - 1] && a[i] != a[i + 1]) {
return String.valueOf(a[i]);
}
}
return a[a.length - 1] == a[a.length - 2] ? "not found" :
String.valueOf(a[a.length - 1]);
}
不用扫描完就有答案了,时间复杂度平均1/2n.
int getNumber(int a[])
{
if(a==null)
{
System.out.println("error");
return ErrorCode;//错误码自己选
}
int temp = a[0];
boolean sign = false;
for(int i = 1;i < a.length; i++)
{
if(a[i] == temp)
{
sign = true;
}
else//和前一个数不一样
{
if(sign == false)
return a[i];
else
temp = a[i];
}
}
}
int getNumber(int a[])
{
if(a==null)
{
System.out.println("error");
return ErrorCode;//错误码自己选
}
int temp = a[0];
boolean sign = false;
for(int i = 1;i < a.length; i++)
{
if(a[i] == temp)
{
sign = true;
if(i == a.length-1)//是最后一个元素
{
return NoElements;
}
}
else//和前一个数不一样
{
if(sign == false)
return a[i];
else
{
if(i == a.length-1)//如果是最后一个元素
{
return a[i];
}
else
temp = a[i];
}
}
}
int getNumber(int a[])
{
if(a==null)
{
System.out.println("error");
return ErrorCode;//错误码自己选
}
int temp = a[0];
boolean sign = false;
for(int i = 1;i < a.length; i++)
{
if(a[i] == temp)
{
sign = true;
if(i == a.length-1)//是最后一个元素
{
return NoElements;
}
}
else//和前一个数不一样
{
if(sign == false)
return a[i-1];//上贴中错了
else
{
if(i == a.length-1)//如果是最后一个元素
{
return a[i];
}
else
temp = a[i];
}
}
}
int ret=Integer.MAX_VALUE;
for(int i=0;i<a.length;i++){
boolean b=true;
for(int j=0;j<a.length;j++){
if(i!=j && a[i]==a[j]) {b=false;break;}
}
if(b && a[i]<ret) ret=a[i];
}
return ret;
}
int result = -1;
boolean flag = false;
result = a[0];
if (a == null) {
return -1;
}
if (a.length == 1) {
return result;
}
for (int i = 1; i < a.length; i++) {
if (result == a[i]) {
flag = true;
}
else {
if (flag) {
flag = false;
result = a[i];
}
else {
return result;
}
}
}
if (!flag) {
return result;
}
return -1;
}
只需找出第一个单数即可
int i=0;
while(i<a.length-1){
i++;
if(a[i]!=a[i+1]&&a[i]==a[i-1])//
continue;
if(a[i]==a[i+1])
i+=2;
if(a[i]!=a[i+1]&&a[i]!=a[i-1])
break;
}
int min=0,next=0;
min=a[0];
for(int i=1;i<a.length;i++){
if(next==1){
min=a[i];
next=0;
continue;
}
if(a[i]>min){
;
}
else if(a[i]<min){
min=a[i];
}
else{
next=1;
}
}
System.out.println(min);
Array类啊,然后再比较一下相邻两个数值是否相等;
int find(int[] a)
{
for(int i=0;i<a.length-1;i++)
if(a[i]!=a[i+1])
return a[i];
return a[a.length-1];
}