1. 最长上升子序列
DP算法,注意最终答案的结果可能是以任意一个数结尾的LargestDist,这里可能有问题,以及注意排查输入输出错误。
n^2复杂度的解答:
注意import java.util.Scanner
发现自己在没有IDE下的编程状况很是堪忧
<u>import java.util.Scanner;</u>
public class LIP {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int ElementCount = in.nextInt();
int inputNumb[] = new int[ElementCount];
for(int i = 0;i<ElementCount;i++)
{
inputNumb[i] = in.nextInt();
}
int LargestDist[] = new int[ElementCount];
LargestDist[0] = 1;
int FinalAns= 0;
int tempMax;
for(int i = 1;i<ElementCount;i++)
{
tempMax = 0;
for(int j = 0;j<i;j++)
{
if(inputNumb[j]<inputNumb[i] && LargestDist[j]>tempMax)
{
tempMax = LargestDist[j];
}
}
LargestDist[i] = tempMax+1;
if(LargestDist[i]>FinalAns)
FinalAns = LargestDist[i];
}
System.out.println(FinalAns);
}
}
2. 打印出所有满足条件的数组
未完成,目前考虑用vector打印,注意点,一个是vector不是用pushback是用add
C++中是vector::push_back
import java.util.Scanner;
import java.util.Vector;
import java.util.Stack;
public class LIP {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int ElementCount = in.nextInt();
NumbUnit inputNumb[] = new NumbUnit[ElementCount];
for(int i = 0;i<ElementCount;i++)
{
inputNumb[i].numb = in.nextInt();
inputNumb[i].lastIndex = -1;
}
int LargestDist[] = new int[ElementCount];
LargestDist[0] = 1;
int FinalAns= 0;
Vector<Integer> FinalLargestIndex;
int tempMax;
for(int i = 1;i<ElementCount;i++)
{
tempMax = 0;
for(int j = 0;j<i;j++)
{
if(inputNumb[j].numb<inputNumb[i].numb && LargestDist[j]>tempMax)
{
tempMax = LargestDist[j];
inputNumb[i].lastIndex.clear();
inputNumb[i].lastIndex.add(j);
}
else if(inputNumb[j].numb<inputNumb[i].numb && LargestDist[j]==tempMax)
inputNumb[i].lastIndex.add(j);
}
LargestDist[i] = tempMax+1;
if(LargestDist[i]>FinalAns)
{
FinalAns = LargestDist[i];
FinalLargestIndex.clear();
FinalLargestIndex.add(i);
}
else if(LargestDist[i]==FinalAns)
FinalLargestIndex.add(i);
}
System.out.println(FinalAns);
Stack<Integer> stack = new Stack<Integer>();
int output[] = new int[ElementCount];
for(int i =0;i<FinalLargestIndex.size();i++)
{
stack.push(FinalLargestIndex[i]);
}
int outIndex = ElementCount-1;
while(!stack.empty())
{
output[outIndex] = stack.pop();
outIndex--;
output[outIndex] = inputNumb[output[outIndex]].lastIndex;
}
}
}
class NumbUnit
{
public
int numb;
Vector<Integer> lastIndex;
}