如题java数组类似 3337779822773308,希望输出379820.
但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。
就是完全只用普通的for,if语句来做。 我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。代码:
for (int i=0;i<length-1;i++){
for(int j=i+1;j<length;j+){
if(ints[i] != ints[j]){
int index = i+1;
ints[index]=ints[j];
index++;
}
}
}首先这段代码总是报数组容量不够,实在不明白为什么。另外这样做出来会有多出来的数字,不知道该拿这些数字怎么办。求助大神~~~
但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。
就是完全只用普通的for,if语句来做。 我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。代码:
for (int i=0;i<length-1;i++){
for(int j=i+1;j<length;j+){
if(ints[i] != ints[j]){
int index = i+1;
ints[index]=ints[j];
index++;
}
}
}首先这段代码总是报数组容量不够,实在不明白为什么。另外这样做出来会有多出来的数字,不知道该拿这些数字怎么办。求助大神~~~
我觉得大概就是一个查找的算法。
先用第一个元素去找,找到重复的值的索引存起来,同时存第一个值
然后顺序用下一个不是重复的值继续找然后存
一直找到最后over
String s= new StringBuffer(Arrays.toString(x).replaceAll(",|\\s|\\[|\\]", "")).reverse().toString() ;
System.out.println(new StringBuffer(s.replaceAll("(?s)(.)(?=.*\\1)", "")).reverse().toString());
private boolean[] flags = new boolean[]{
false, false, false, false, false, false, false, false, false, false
};
private boolean getFlag(int value){
boolean result = flags[value];
flags[value] = true;
return result;
}
public void f(){
int[] source = new int[]{
3, 3, 3, 7, 7, 7, 9, 8, 2, 2, 7, 7, 3, 3, 0, 8
};
for(int a : source){
if(!getFlag(a))
System.out.print(a);
}
}
public static void main(String[] args){
new Test().f();
}
}
import java.util.HashSet;
import java.util.Set;public class Ddq { public static void main(String[] args) {
int i[] = {3, 3, 3, 7, 7, 7, 9, 8, 2 , 2, 7, 7, 3, 3, 0, 8};
Set<Integer> set = new HashSet<Integer>();
for (int j = 0; j < i.length; j++) {
set.add(i[j]);
}
System.out.println(set);
}
}
楼主的要求是不准用集合
其次Set集合是无序的,你确定还能按要求输出379820??
[code=java][
int len = ints.length, lenN = 0;
int[] t = new int[len];
L: for (int i : ints) {
for (int x = 0; x < lenN; x++) {
if (t[x] == i) {
continue L;
}
}
t[lenN++] = i;
}
int[] intsN = new int[lenN];
System.arraycopy(t, 0, intsN, 0, lenN);
/code]
定义一个临时数组 t,用临时数组存不重复的值
楼主说了,不准用集合类
不过,楼主的这个要求有嘛意义
楼主的要求是不准用集合
其次Set集合是无序的,你确定还能按要求输出379820??
public class Ddq { public static void main(String[] args) {
int arr[] = {3, 3, 3, 7, 7, 7, 9, 8, 2, 2, 7, 7, 3, 3, 0, 8};
String str = "";
for (int i = 0; i < arr.length; i++) {//遍历原始数组
boolean flag = true;
if ("".equals(str)) {//直接把原始数组的第一位添加到字符串
flag = false;
str += arr[i];
continue;
}
for (int j = 0; j < str.split(",").length; j++) {//遍历字符串转成的数组
if (arr[i] == Integer.parseInt(str.split(",")[j] + "")) {//如果原始数组的数字与符串转成的数组每个数字有相同的,给一个状态,并结束本次循环
flag = false;
continue;
}
}
if (flag) {
str += "," + arr[i];
}
}
System.out.println(str);
}
}
//打印
//3,7,9,8,2,0
int c = -2147483648;//标记
int[] in1 = new int[] { 3, 3, 3, 7, 7, 7, 9, 8, 2, 2, 7, 7, 3, 3, 0, 8, 50,
46, 82, 64, 50, 50, 82, 94, 15, -56, -56, -58, -46, 7, 7, 7, 3, 3,
3, 50, 9, 8, -56, -58, 100, -100, 100, -100,78 }; public void toFC() {//判断标记有没有被占用
for (int t = 0; t < in1.length; t++) {
if (in1[t] == c) {
c++;
}else {
break;
}
}
} public void f() {//冒泡比较
for (int i = 0; i < in1.length; i++) {
if (in1[0] == c) {
break;
}
for (int f = i; f < in1.length - 1; f++) {
if (in1[i] == in1[f + 1]) {
in1[f + 1] = c;//打标记
}
}
}
} public void toF() {//遍历
for (int i = 0; i < in1.length; i++) {
if (in1[i] != c) {
System.out.print(in1[i] + " ");
}
}
} public static void main(String[] args) {
Test t = new Test();
t.toFC();
t.f();
t.toF();
}
}
楼主的要求是不准用集合
其次Set集合是无序的,你确定还能按要求输出379820??
TreeSet可以保持元素的自然顺序
var newNumber = [];
for(var i = 0;i<array.length;i++){
if(newNumber.indexOf(array[i]) == -1){
newNumber.push(array[i])
}
}
console.info(newNumber.join(""));
for (int i=0;i<loop.length;i++){
for(int j=0;j<i;j++){
if (loop[i] == loop[j]){
loop[i] = loop[0];
}
}
}
for (int i=0;i<loop.length;i++){
if(loop[i]==loop[0]){
if(i==0){
System.out.print(loop[0]);
}
}else{
System.out.print(loop[i]);
}
}
比较简单的思路是把所有跟以前出现过的数字全部改成数组的第一个值,然后打印的时候第一个值打印一边,别的要是碰到再跟第一个值一样的就跳过,这样连临时数组都不要建了
for (int i = 0; i < num.length()-1; i++)
{
String value=num.substring(0,i+1);
String c=num.substring(i,i+1);
for (int j = i; j < num.length(); j++) {
String k=num.substring(j,j+1);
if(!c.equals(k)){
value+=k;
}
}
num=value;
}
System.out.println(num);
* 如下问题的解决方案: <br>
* 如题java数组类似 3337779822773308,希望输出379820.
* 但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。 就是完全只用普通的for,if语句来做。
* <ul>
* 参数类型:
* <li>整型</li>
* <li>字符串型</li>
* <li>整型数组</li>
* <li>字符数组</li>
* </ul>
* <ul>
* 返回值类型:
* <li>整型</li>
* </ul>
*
* @author Administrator
*
*/
public class Solution { public int getNumber(int input) {
return getNumber(Integer.toString(input));
} public int getNumber(String input) {
return getNumber(input.toCharArray());
} public int getNumber(char[] input) {
int[] result = new int[input.length];
for (int i = 0; i < input.length; i++)
result[i] = Integer.parseInt(Character.toString(input[i]));
return getNumber(result);
} /**
* 获取问题的结果
*
* @param input 输入的数
* @return 如题结果数
*/
public int getNumber(int[] input) {
boolean[] temp = new boolean[10];// 表示每个数字是否重复的临时标记
int index = 0;// 表示未重复的数的数量即生成新数的位数
// 遍历原数组
for (int i = 0; i < input.length; i++)
// 将出现过的数标记为重复
if (!temp[input[i]]) {
temp[input[i]] = true;
input[index] = input[i];// 由于当一个数重复出现时一定在这个数的后面,所以直接放入原数组的前面
index++;// 位数增加1
}
int result = 0;
// 生成新数
for (int i = 0; i < index; i++)
result += Math.pow(10, index - 1 - i) * input[i];
return result;
} // Test
public static void main(String[] args) {
System.out.println(new Solution().getNumber("3337779822773308"));
}
}
输出结果:379820
int[] num = {3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8};
int[] result = new int[num.length];
int n=0;
for(int i=0;i<num.length;i++)
{
boolean flag = true;
if(i==0)
{
result[0] = num[0];
}
for(int j=0;j<n;j++)
{
if(num[i] == result[j])
{
flag = false;
break;
}
}
if(flag == true)
{
result[n++]=num[i];
System.out.print(num[i]+",");
}
}
public void primeNumber(){
int[] a={3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8};
for (int i=0;i<a.length;i++) {
for(int j=i+1;j<a.length;j++){
if(a[i]==a[j]){
a[j]=-1;
}
}
}
for(int q=0;q<a.length;q++){
if(a[q]>=0)System.out.print(a[q]);
}
}
你的意思是:不一样的字符就留下来,对吧?这本身就是题目的要求啊,是目的,而不是思路和方法……
我认为好点的思路是:
利用for循环遍历每一个元素,从nts【0】开始跟后面的数作比较,相反,只要遇到有相同的数字,就break,无须在比较了,接着下一个数。如果当前数和后面的所有数都比较了,没有发现相同的数,就输出。程序段如下:
package biaozhun;import java.util.Scanner;public class Text {
public static void main(String[] args) {
Scanner s=new Scanner(System.in); //获取键盘里面输入的字符串
System.out.println("请输入字符串");
String sr=s.nextLine();//把字符串整行取出
char ch[]=sr.toCharArray();//把字符串放入数ch【】中
int j=0;//初始化j
boolean b=false;
for(;j<=ch.length-2;j++){
for(int i=j+1;i<=ch.length-1;i++){
if(ch[j]==ch[i]){
b=false;
break;//遇到相同字符,立即结束循环,进入下一个数的检验
}
b=true;
}
if(b==true){
System.out.print(ch[j]);
}
}
if(j==ch.length-1){
System.out.print(ch[ch.length-1]);//输出最后一个数字(最后的数字因为不需要比较,所以无法被for嵌套输出)
} }}
这是完整程序,我测试过了,可以运行,你可以试一下(只是不清楚我程序里面是否存在楼主声明不能用的方法)…………
2.有多出来的数字是你没有为index的数组添加结束符。
代码如下:
int []num = new int []{3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8};
int length = num.length;
int i,j;
int index = 0;
for(i=1;i<length;i++)
{
for(j=0;j<=index;j++)
{
if(num[i] == num[j]) break; //如果与已筛选出的数相同,则进行下一个数的判断
if(j == index) // j == index 判断完毕,没有相同的,将其添加到下一位
{
num[++index] = num[i];
}
}
}
num[++index]='\0'; //全部筛选完毕后,为筛选数组添加结束符
for(i=0;i<index;i++)
System.out.println(num[i]);