「最大子数组java」最大子数组线性算法
今天给各位分享最大子数组java的知识,其中也会对最大子数组线性算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java 求二维数组的最大值!!
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
//初始化一个测试的二维数组
int[][] a = new int[][] { { 34,234,543,2,42,224 }, { 234,56,88,241,564,234,555,24 }, { 13,444,534,76,9999,894,34 } };
System.out.println("max value is:" + getMaxValue1(a));
System.out.println("max value is:" + getMaxValue2(a));
}
/**
* 方法1:遍历二维数组的所有的元素与当前最大的值比较,并记录
*/
static int getMaxValue1(int[][] a){
int maxValue = 0;//用于记录当然最大值
if(a!=null a.length!=0)
for (int[] a1 : a) {
for (int i : a1) {
if(maxValuei)maxValue = i;
}
}
return maxValue;
}
/**
* 方法2:对子数组进行排序,然后比较子数组中最大的值。当然这里只求最大值也没必要排序-_-!!,只是体现了一种思想
*/
static int getMaxValue2(int[][] a){
int maxValue = 0;
if(a!=null a.length!=0)
for (int[] a1 : a) {
Arrays.sort(a1);//对a1进行排序,升序的
if(maxValuea1[a1.length-1])maxValue = a1[a1.length-1];//比较子数组中最大的值
}
return maxValue;
}
}
java 中数组的长度最大可以多长啊?
java数组最多只能是255维的,每一维的长度,主要看你用的JDK版本,一般来说可以只声明维度,例如int a[][],int b[]。在对Java数组赋值后,可以通过*.lenght()来查看该数组的长度。
最小子数组和与最大子数组和
python 使用切片 动态规划 O(n * logn)
def min_sub_array(data):
min = max = sum(data)
min_list = max_list = data
for i in range(len(data)):
for j in range(i+1,len(data)+1):
sub_list = data[i:j]
sum_sub_array = sum(sub_list)
if sum_sub_array = min:
min = sum_sub_array
min_list = sub_list
elif sum_sub_array max:
max = sum_sub_array
max_list = sub_list
return min,min_list,max,max_list
def min_sub_array1(data):
min = sum(data)
cur_sum = 0
n = len(data)
for i in range(n):
cur_sum = cur_sum + data[i]
if cur_summin:
min = cur_sum
if cur_sum 0:
cur_sum = 0
return min
def max_sub_array1(data):
max = sum(data)
cur_sum = 0
n = len(data)
for i in range(n):
cur_sum = cur_sum + data[i]
if cur_summax:
max = cur_sum
if cur_sum 0:
cur_sum = 0
return max
Java 算法复杂度O(n)
public static int minSub(int[] data){
int min = sumArray(data);
int n = data.length;
int cursum = 0;
for(int i = 0;in;i++){
cursum = cursum + data[i];
if(cursummin){
min = cursum;
}
if(cursum 0){
cursum = 0;
}
}
return min;
}
public static int maxSub(int[] data){
int max = sumArray(data);
int n = data.length;
int cursum = 0;
for(int i = 0;in;i++){
cursum = cursum + data[i];
if(cursummax){
max = cursum;
}
if(cursum 0){
cursum = 0;
}
}
return max;
}
public static int sumArray(int[] data){
int sum = 0;
for(int i = 0;idata.length;i++){
sum = sum + data[i];
}
return sum;
}
java求最大公共子串
二楼改的
c = b.substring(i,j-1);
之后下标越界没了。
程序无法出结果,中间有死循环。当while语句执行完之后j是a.length();然后是执行内循环for语句for(j=b.length()-1;j0;j--) 此时只比较J0;。。。。好像是个死循环。最内层的循环可以在加一个int k来控制。多次运行导致cpu上升至100%的。
提供一种矩阵算法,这是LCS的一种算法:
public class stringCompare {
/**求最长匹配子字符串算法
str数组记录每行生成的最大值strmax
max数组记录str数组最大时所处的列号nummaxj
最大子字符串为substring(nummax-strmax+1,strmax+1)
*/
public static void main(String[] args) {
String s1="asdfgxxcvasdfgc";
String s2="asdfxxcv";
int m=s1.length();
int n=s2.length();
int k=0;
int nummax=0;
int []str=new int[m];
int []max=new int[m];
int []num=new int[m];
for(int i=0;im;i++) //生成矩阵数组
for(int j=n-1;j=0;j--)
{
if(s1.charAt(i)==s2.charAt(j))
if(i==0||j==0)
{
num[j]=1;
max[i]=j;
str[i]=1;
}
else
{
num[j]=num[j-1]+1;
if(max[i]num[j])
{
max[i]=j;
str[i]=num[j];
}
}
else
num[j]=0;
}
for(k=0;km;k++) //求str数组的最大值
{
if(nummaxstr[k])
{
nummax=str[k];
}
}
for(k=0;km;k++)
if(nummax==str[k])
System.out.println(s2.substring(max[k]-str[k]+1,max[k]+1));
}
}
关于最大子数组java和最大子数组线性算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-30,除非注明,否则均为
原创文章,转载请注明出处。