Java 查找数组中相同数字之间的最大跨度
Java 查找数组中相同数字之间的最大跨度,java,arrays,Java,Arrays,圣诞快乐,希望你们心情愉快,我有一个关于Java数组的问题,如下所示。我一直在为得到它而努力 考虑数组中某个值的最左边和最右边的外观。我们可以说“span”是两个元素之间的元素数。单个值的范围为1。编写一个**Java函数**,返回给定数组中的最大跨度。 **示例: maxSpan({1,2,1,1,3})→ 4,答案是4,因为1到1之间的最大跨度是4 maxSpan({1,4,2,1,4,1,4})→ 6,答案是6,因为4到4之间的最大跨度是6 最大跨距({1,4,2,1,4,4,4})→ 6
圣诞快乐,希望你们心情愉快,我有一个关于Java数组的问题,如下所示。我一直在为得到它而努力
考虑数组中某个值的最左边和最右边的外观。我们可以说“span”是两个元素之间的元素数。单个值的范围为1。编写一个**Java函数**,返回给定数组中的最大跨度。
**示例:maxSpan({1,2,1,1,3})→ 4,答案是4,因为1到1之间的最大跨度是4
maxSpan({1,4,2,1,4,1,4})→ 6,答案是6,因为4到4之间的最大跨度是6
最大跨距({1,4,2,1,4,4,4})→ 6,答案是6,因为4到4之间的最大跨度是6,大于1到1之间的最大跨度是4,因此6>4的答案是6 我有一个不工作的代码,它包含了给定元素的所有跨度,我找不到给定元素的最大跨度 请帮帮我 上述计划的结果如下所示 预计会有这次跑步
maxSpan({1,2,1,1,3})→ 4.5倍
maxSpan({1,4,2,1,4,1,4})→ 6.8 X
最大跨距({1,4,2,1,4,4,4})→ 69x
maxSpan({3,3,3})→ 3.5倍
maxSpan({3,9,3})→ 3正常
maxSpan({3,9,9})→ 23x
maxSpan({3,9})→ 1 1正常
maxSpan({3,3})→ 23x
maxSpan({})→ 0 1 X
最大跨距({1})→ 1 1正常 ::代码::
public int maxSpan(int[] nums) {
int count=1;//keep an intial count of maxspan=1
int maxspan=0;//initialize maxspan=0
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i] == nums[j]){
//check to see if "i" index contents == "j" index contents
count++; //increment count
maxspan=count; //make maxspan as your final count
int number = nums[i]; //number=actual number for maxspan
}
}
}
return maxspan+1; //return maxspan
}
public int maxSpan(int[]nums){
int count=1;//保留maxspan=1的初始计数
int maxspan=0;//初始化maxspan=0
对于(int i=0;i我发现您的尝试存在以下问题:
- 您的
计数
完全错误。您可以从i
和j
计算计数
:j-i+1
- 一旦得到任何跨度,您将覆盖
maxcount
,因此您将得到最后一个跨度,而不是最大跨度。通过执行maxspan=Math.max(maxspan,count);
来修复它
- 您可以删除行
int number=nums[i];
,因为您从不使用number
- 如果您遵循上面的提示,请删除
返回
maxspan+1;`中的+1
- 如果数组中有任何值,则Initial
maxspan
应为1,如果数组为空,则应为0
这应该有助于您使其正常工作。请注意,您可以在数组的一次遍历中完成此操作,但这可能会使您的代码太长。在考虑效率之前,请集中精力使代码正常工作。我使用了一个列表。这样做更简单。
唯一的问题是如果阵列太大,可能需要一段时间
import java.util.ArrayList;
import java.util.List;
public class StackOverflow {
public static void main(String[] args) {
List<Integer> listNumbers = new ArrayList<Integer>();
listNumbers.add(3);
listNumbers.add(3);
listNumbers.add(3);
listNumbers.add(2);
listNumbers.add(1);
listNumbers.add(4);
listNumbers.add(3);
listNumbers.add(5);
listNumbers.add(1);
listNumbers.add(1);
listNumbers.add(1);
listNumbers.add(1);
listNumbers.add(1);
listNumbers.add(3);
int result = 0;
Integer key = null;
for(Integer i : listNumbers){
int resultDistance = returnDistance(listNumbers, i);
if (resultDistance > result){
result = resultDistance;
key = i;
}
}
System.out.println("MaxSpan of key " + key + " is: " + result);
}
private static int returnDistance(List<Integer> listNumbers, Integer term){
Integer startPosition = null;
Integer endPosition = null;
boolean bolStartPosition = false;
boolean bolResult = false;
int count = 1;
int result = 0;
for (Integer i : listNumbers){
if (i == term && !bolStartPosition){
startPosition = count;
bolStartPosition = true;
continue;
}
if (i == term && bolStartPosition){
endPosition = count;
}
count++;
}
if (endPosition != null){
// because it's inclusive from both sides
result = endPosition - startPosition + 2;
bolResult = true;
}
return (bolResult?result:-1);
}
}
import java.util.ArrayList;
导入java.util.List;
公共类堆栈溢出{
公共静态void main(字符串[]args){
List listNumbers=new ArrayList();
增加(3);
增加(3);
增加(3);
增加(2);
增加(1);
增加(4);
增加(3);
增加(5);
增加(1);
增加(1);
增加(1);
增加(1);
增加(1);
增加(3);
int结果=0;
整数键=空;
for(整数i:列表编号){
int resultDistance=返回距离(列表编号,i);
如果(结果状态>结果){
结果=结果状态;
key=i;
}
}
System.out.println(“键的最大跨距”+key+”为:“+result”);
}
私有静态int returnDistance(列表列表编号,整数项){
整数startPosition=null;
整数endPosition=null;
boolean-boolstartposition=false;
布尔结果=假;
整数计数=1;
int结果=0;
for(整数i:列表编号){
if(i==术语和位置){
起始位置=计数;
bolStartPosition=true;
持续
}
if(i==术语和位置){
结束位置=计数;
}
计数++;
}
if(endPosition!=null){
//因为它包含了双方
结果=结束位置-开始位置+2;
结果=真;
}
返回(结果?结果:-1);
}
}
既然已经给出了一个解决方案,这里有一个更有效的解决方案,它使用一个过程
public static void main(String... args) {
int maxspan = maxspan(3, 3, 3, 2, 1, 4, 3, 5, 3, 1, 1, 1, 1, 1);
System.out.println(maxspan);
}
private static int maxspan(int... ints) {
Map<Integer, Integer> first = new LinkedHashMap<Integer, Integer>(); // use TIntIntHashMap for efficiency.
int maxspan = 0; // max span so far.
for (int i = 0; i < ints.length; i++) {
int num = ints[i];
if (first.containsKey(num)) { // have we seen this number before?
int span = i - first.get(num) + 1; // num has been found so what is the span
if (span > maxspan) maxspan = span; // if the span is greater, update the maximum.
} else {
first.put(num, i); // first occurrence of number num at location i.
}
}
return maxspan;
}
publicstaticvoidmain(字符串…参数){
int maxspan=maxspan(3,3,3,2,1,4,3,5,3,1,1,1,1,1);
System.out.println(maxspan);
}
专用静态整数最大跨距(整数…整数){
Map first=new LinkedHashMap();//使用TIntIntHashMap提高效率。
int maxspan=0;//到目前为止的最大跨度。
for(int i=0;imaxspan)maxspan=span;//如果跨度更大,则更新最大值。
}否则{
first.put(num,i);//在位置i第一次出现num。
}
}
返回最大跨度;
}
public int maxSpan(int[]nums){
//将数字转换为字符串
字符串编号=”;
如果(nums.length==0)
返回0;
对于(int ndx=0;ndxpublic int maxSpan(int[] nums) {
//convert the numnber to a string
String numbers = "";
if (nums.length == 0)
return 0;
for(int ndx = 0; ndx < nums.length;ndx++){
numbers += nums[ndx];
}
//check beginning and end of string
int first = numbers.indexOf(numbers.charAt(0));
int last = numbers.lastIndexOf(numbers.charAt(0));
int max = last - first + 1;
int efirst = numbers.indexOf(numbers.charAt(numbers.length()-1));
int elast = numbers.lastIndexOf(numbers.charAt(numbers.length()-1));
int emax = elast - efirst + 1;
//return the max span.
return (max > emax)?max:emax;
}
public int maxSpan(int[] nums) {
int current = 0;
int currentcompare = 0;
int counter = 0;
int internalcounter = 0;
if(nums.length == 0)
return 0;
for(int i = 0; i < nums.length; i++) {
internalcounter = 0;
current = nums[i];
for(int x = i; x < nums.length; x++) {
currentcompare = nums[x];
if(current == currentcompare) {
internalcounter = x - i;
}
if(internalcounter > counter) {
counter = internalcounter;
}
}
}
return counter + 1;
}
public int maxSpan(int[] nums) {
if(nums.length<1){
return 0;
}
int compare=1;
for (int i=0; i<nums.length; i++){
for (int l=1; l<nums.length; l++){
if((nums[l]==nums[i])&&(Math.abs(l)-Math.abs(i))>=compare){
compare = Math.abs(l)-Math.abs(i)+1;
}
}
}
return compare;
}
public int maxSpan(int[] nums) {
int maxSpan=0;
int tempSpan=0;
if(nums.length==0){
return 0;
}
for(int i=0;i<nums.length;i++){
for(int j=nums.length-1;j>i;j--){
if(nums[i]==nums[j]){
tempSpan=j-i;
break;
}
}
if(tempSpan>maxSpan){
maxSpan=tempSpan;
}
}
return maxSpan+1;
}
public static int MaxSpan(int[] input1, int key)
{
int Span = 0;
int length = input1.length;
int i,j,k = 0;
int start = 0, end = 0 ;
k = key;
for (int l = 0; l < length; l++) {
if(input1[l] == k) { start = l;
System.out.println("\nStart = " + start);
break;
}
}
if(start == 0) { Span = 0; System.out.println("Key not found"); return Span;}
for (j = length-1; j> start; j--) {
if(input1[j] == k) { end = j;
System.out.println("\nEnd = " + end);
break;
}
}
Span = end - start;
System.out.println("\nStart = " + start + "End = " + end + "Span = " + Span);
return Span;
}
public int maxSpan(int[] nums) {
int length = nums.length;
if(length <= 0)
return 0;
int left = nums[0];
int rigth = nums[length - 1];
int value = 1;
//If these values are the same, then the max span is length
if(left == rigth)
return length;
// the last match is the largest span for any value
for(int x = 1; x < length - 1; x++)
{
if(nums[x] == left || nums[x] == rigth)
value = x + 1;
}
return value;
}
public int maxSpan(int[] nums) {
int count, largest=0;
for (int x=0; x< nums.length; x++)
{
for (int y=0; y< nums.length; y++)
{
if (nums[x]==nums[y])
{
count= y-x+1;
if (count > largest)
{
largest= count;
}
}
}
}
return largest;
}
import java.io.*;
public class maxspan {
public static void main(String args[])throws java.io.IOException{
int A[],span=0,pos=0;
DataInputStream in=new DataInputStream(System.in);
System.out.println("enter the number of elements");
A=new int[Integer.parseInt(in.readLine())];
int i,j;
for(i=0;i<A.length;i++)
{
A[i]=Integer.parseInt(in.readLine());
}
for(i=0;i<A.length;i++)
{
for(j=A.length-1;j>=0;j--)
if(A[i]==A[j]&&(j-i)>span){span=j-i;pos=i;}
}
System.out.println("maximum span => "+(span+1)+" that is of "+A[pos]);
}
}
public static int maxSpan(int[] nums) {
int left = 0;
int right = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[0] == nums[nums.length - 1 - i]) {
left = nums.length - i;
break;
} else if (nums[nums.length - 1] == nums[i]) {
right = nums.length - i;
break;
}
}
return Math.max(left, right);
}
public int maxSpan(int[] nums) {
if(nums.length < 2){ //weed out length 0 and 1 cases
return nums.length;
}
int maxSpan = 1; //start out as 1
for(int a = 0; a < nums.length; a++){
for(int b = nums.length - 1; b > a; b--){
if(nums[a] == nums[b]){
maxSpan = Math.max(maxSpan, (b + 1 - a));
//A little tricky getting those indices together.
break; //there's no reason to continue,
//at least for this single loop execution inside another loop
}
}
}
return maxSpan; //the maxSpan is here!
}
The Math.max method returns the larger of 2 values, one of them if they are equal.
public int maxSpan(int[] nums) {
for (int span=nums.length; span>0; span--) {
for (int i=0; i<nums.length-span+1; i++) {
if (nums[i] == nums[i+span-1]) return span;
}
}
return 0;
}
public int maxSpan(int[] nums) {
if(nums.length > 0){
if(nums[0] == nums[nums.length - 1]){
return nums.length;
}
else{
return nums.length - 1;
}
}
return nums.length;
}
public int maxSpan(int[] nums) {
int b = 0;
if (nums.length > 0) {
for (int i = 0; i < nums.length; i++) {
int a = nums[0];
if (nums[i] != a) {
b = nums.length - 1;
} else {
b = nums.length;
}
}
} else {
b = 0;
}
return b;
}
public int maxSpan(int[] nums) {
Stack stack = new Stack();
int count = 1;
int value = 0;
int temp = 0;
if(nums.length < 1) {
return value;
}
for(int i = 0; i < nums.length; i++) {
for(int j = nums.length - 1; j >= i; j--) {
if(nums[i] == nums[j]) {
count = (j - i) + 1;
stack.push(count);
count = 1;
break;
}
}
}
if(stack.peek() != null) {
while(stack.size() != 0) {
temp = (Integer) stack.pop();
if(value <= temp) {
value = temp;
} else {
value = value;
}
}
}
return value;
}
public int maxSpan(int[] nums) {
int totalspan=0;
int span=0;
for(int i=0;i<nums.length;i++)
{
for (int j=nums.length-1;j>i-1;j--)
{
if(nums[i]==nums[j])
{
span=j-i+1;
if (span>totalspan)
totalspan=span;
break;
}
}
}
return totalspan;
}
public int maxSpan(int[] nums) {
int max_span=0, j;
for (int i=0; i<nums.length; i++){
j=nums.length-1;
while(nums[i]!=nums[j]) j--;
if (j-i+1>max_span) max_span=j-i+1;
}
return max_span;
}
public int maxSpan(int[] nums) {
int span = 0;
Map<Integer, Integer> first = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
if (!first.containsKey(nums[i]))
first.put(nums[i], i);
span = Math.max(span, (i - first.get(nums[i])) + 1);
}
return span;
}
public int maxSpan(int[] nums) {
int result = 0;
for(int i = 0; i < nums.length; i++) {
int item = nums[i];
int span = 0;
for(int j = 0; j<= i; j++) {//find first occurance of item from the left
if(nums[j]==item) {
span = i -j+1;
break;
}
}
if(span>result) {
result = span;
}
}
return result;
}
public int maxSpan(int[] nums) {
int span = 0;
for (int i = 0; i < nums.length; i++) {
for(int j = i; j < nums.length; j++) {
if(nums[i] == nums[j]) {
if(span < (j - i + 1)) {
span = j -i + 1;
}
}
}
}
return span;
}
public int maxSpan(int[] nums) {
int span = 0;
//Given the values at position i 0..length-1
//find the rightmost position of that value nums[i]
for (int i = 0; i < nums.length; i++) {
// find the rightmost of nums[i]
int j =nums.length -1;
while(nums[i]!=nums[j])
j--;
// j is at the rightmost posititon of nums[i]
span = Math.max(span,j-i+1);
}
return span;
}