我正在使用Ardunio,但很高兴使用Java解决方案,因为这可能有助于我理解。
我有一个长度为50的数组stateX[]
,它将保存类似于:
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, -1, -1, 0, 1, 1......
我想知道如何从数组中删除重复的值,这些值是 next 。因此输出将变为具有元素的较小数组:
0, 1, 0, -1, 0, 1
显然这个较小的阵列会改变大小,所以我不确定。以及如何检测重复值。
帮助表示感谢,谢谢
答案 0 :(得分:0)
我不知道"系统"方法论,但这是你可以做到的一种方式:
int[] array = new int[]{1,0,0,1,1,1,-1,-1,1,-1};
List<Integer> lst = new ArrayList<Integer>();
lst.add(array[0]);
for(int i=1;i<array.length;i++)
{
if(array[i]!=lst.get(lst.size()-1)) lst.add(array[i]);
}
int lstSize = lst.size();
int[] revisedArray = new int[lstSize];
for(int i = 0; i < lstSize; i++) revisedArray[i] = lst.get(i);
答案 1 :(得分:0)
以下解决方案可以就地工作,并且不使用任何Java列表,这两个特性在移植到Arduino / C时都很有帮助。它的复杂度为O(a.length)。
请注意,由于未调整输入/输出数组的大小,并且删除了值,因此结果太大。返回值newSize
表示解决方案的长度,即在调用方法后,只有a中的第一个newSize
值是相关的。
public static int removeAdjacentDuplicates(int[] a) {
int newSize = 1;
for (int i = 1; i < a.length; i++) {
// check if the current value differs from the preceding one
if (a[i] != a[i - 1]) {
a[newSize++] = a[i];
}
}
return newSize;
}
答案 2 :(得分:0)
抱歉,我不知道Arduino,但是我用Java编写了以下课程,这是非常自我解释的,希望这可能会有所帮助,不要犹豫,提出任何问题!:
package test;
import java.util.ArrayList;
import java.util.Random;
public class Duplicates {
static ArrayList<Integer> ints = new ArrayList<Integer>();
public static void main(String[] args)
{
//Creating an arrayList with random numbers from 0 to 5, note that it will work with any numbers.
for(int index = 0 ; index <= 1000 ; index++)
{
Random myRandom = new Random();
int x = (int) (myRandom.nextDouble() * 5);
ints.add(x);
}
//Calling my method to remove dupliates next to another
ArrayList<Integer> cleanedList = removeNextToAnotherDuplicates(ints);
//Displaying it in the console
System.out.println(cleanedList.toString());
}
public static ArrayList<Integer> removeNextToAnotherDuplicates(ArrayList<Integer> list)
{
for(int i = 0 ; i < list.size() ; i++)
{
boolean continueFlag = true;
// j = j because I do not want to always increment my position, since I would skip some due to the fact that I remove duplicates
for( int j = i + 1; j < list.size() && continueFlag ; j = j)
{
//Showing each iterations.
System.out.println("i("+ i +") :" + list.get(i).intValue() + " j("+ j +") :" + list.get(j).intValue());
if(list.get(i).intValue() == list.get(j).intValue())
{
list.remove(j);
}
else
{
continueFlag = false;
j++;
}
//Showing each iterations.
System.out.println("flag: "+ continueFlag);
System.out.println(list.toString());
}
}
return list;
}
}