LeetCode——数组的练习(java)之数组的遍历

数组的遍历

  • 485
package cn.itcast.zr.problem;

//给定一个二进制数组nums,计算其中最大连续1的个数
import java.util.Scanner;

import javax.naming.directory.SearchControls;
public class Solution {

	public static int findMaxConsecutiveOnes(int[] nums) {
		 int maxCount = 0, count = 0;
	        for (int i = 0; i < nums.length; i++) {
	            if (nums[i] == 1) {
	                count++;
	            } else {
	                maxCount = Math.max(maxCount, count);
	                count = 0;
	            }
	        }
	        maxCount = Math.max(maxCount, count);
	        return maxCount;

	}
	public static void main(String[] args) {
	/*
	 * 不限制输入数组的长度
	 * */
		//输入:nums=[1,1,0,1,1,1]
		System.out.println("请输入几个书并用逗号隔开:");
		Scanner sc = new Scanner(System.in);
		String string=sc.next().toString();
		String[] arr=string.split(",");
		int[] b=new int[arr.length];
		for(int j=0;j<b.length;j++) {
			b[j]=Integer.parseInt(arr[j]);
			System.out.print(b[j]+" ");
		}
		System.out.println();
		
		int total=findMaxConsecutiveOnes(b);
		System.out.println(total);
}
}

  • 495
import java.util.Scanner;

public class solution {
	   public static int findPoisonedDuration(int[] timeSeries, int duration) {
			
			int right=timeSeries[0]+duration-1;
				 int res=0;
				 for(int i=1;i<timeSeries.length;i++) {
		             //如果下一次击中时间超过中毒持续时间
					 if(timeSeries[i]>right) {
		                //直接累加
						 res+=duration;
		                 //并将右边界扩展一下,以备下一次中毒
						 right=timeSeries[i]+duration-1;
						 continue;
					 }
		             //如果下一次击中时间在中毒持续时间之内
		             //先累加重叠时间
					 res+=timeSeries[i]-timeSeries[i-1];
		             //再增加最后一次中毒时间。
					 right=timeSeries[i]+duration-1;
				 }
				 res+=duration;
				 System.out.println(res);
				 return duration;
			    }

			public static void main(String[] args) {
				// TODO Auto-generated method stub

				//输入攻击时间点(数组形式)
				System.out.println("输入数组长度");
				Scanner scanner=new Scanner(System.in);
				int m=scanner.nextInt();
				int timeSeries[]=new int[m];
				System.out.println("输入数组");
				for(int i=0;i<timeSeries.length;i++) {
					timeSeries[i]=scanner.nextInt();
				}
				
				//输入一次攻击后中毒的时间
				int duration=0;
			
				System.out.println("输入持续时间");
				duration=scanner.nextInt();
				findPoisonedDuration(timeSeries,duration);
				
				
				
			}

		}

  • 414
    找数组次大值的做法是使用两个变量a和b分别存储遍历过程中的最大值和次大值。
    同理,可以使用a、b、c三个变量来指定最大值,次大值,第三大值。
    从前往后遍历nums,假设当前元素为x,对是否更新三者进行分情况讨论
    1.x>a,说明最大值被更新,将原本的 最大值 和 次大值 往后顺延为 次大值 和 第三大值 ,并用 x更新 a;
    2.x<a且x>b,说明次大值被更新,将原本的 次大值 往后顺延为 第三大值,并用x更新b;
    3.x<b且x>c,说明第三大值被更新,使用x更新c。


public class Solution {
	public static int thirdMax(int[] nums) {
		//定义三个变量分别用来表示最大值,次大值,第三大值
		 long a = Long.MIN_VALUE, b = Long.MIN_VALUE, c = Long.MIN_VALUE;
	        for (long num : nums) {
	            if (num > a) {
	                c = b;
	                b = a;
	                a = num;
	            } else if (a > num && num > b) {
	                c = b;
	                b = num;
	            } else if (b > num && num > c) {
	                c = num;
	            }
	        }
	        return c == Long.MIN_VALUE ? (int) a : (int) c;
	    }


	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int nums[]= {0,1,2,2,3,4,4,5};
		int c=thirdMax(nums);
		System.out.println(c);
	}

}

  • 628 三个数的最大乘积
import java.util.Iterator;

class Solution {
    public static int maximumProduct(int[] nums) {
    	
//		首先对数组进行排序
    	for (int i = nums.length - 1; i > 0; i--)
    	{
    	    //在 0-i 范围内,将该范围内最大的数字沉到i
    	    for (int j = 0; j < i; j++)
    	    {
    	        if (nums[j] > nums[j+1])
    	        {
    	            //交换
    	            int temp = nums[j];
    	            nums[j] = nums[j+1];
    	            nums[j+1] = temp;
    	        }
    	    }
    	}
    	
    	
System.out.println
(Math.max
		(nums[0] * nums[1] * nums[nums.length - 1], nums[nums.length - 3] * nums[nums.length - 2] * nums[nums.length - 1]));

   return Math.max
			(nums[0] * nums[1] * nums[nums.length - 1], nums[nums.length - 3] * nums[nums.length - 2] * nums[nums.length - 1]);
    }
    public static void main(String[] args) {
		//输入一个数组,这里直接给出数组
    	int nums[]= {-100,-2,-3,1};
    	maximumProduct(nums);
    	
	}
}```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值