ARTS打卡计划第二周-Algorithm

665. 非递减数列  https://leetcode-cn.com/problems/non-decreasing-array/

给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]

class Solution {
    	public boolean checkPossibility(int[] nums) {

		int len_num = nums.length;
		if (len_num == 1) {
			return true;
		}
		boolean[] low = new boolean[len_num];
		boolean[] up = new boolean[len_num];
		Arrays.fill(low, true);
		Arrays.fill(up, true);
		for (int i = 0; i < len_num; i++) {
			if (i > 0) {
				if (nums[i] >= nums[i - 1] && low[i - 1]) {
					low[i] = true;
				} else {
					low[i] = false;
				}

			}
			if (i < len_num - 1) {
				if (nums[len_num - i - 2] <= nums[len_num - i - 1] && up[len_num - i - 1]) {
					up[len_num - i - 2] = true;
				}
				else {
					up[len_num - i - 2] = false;
				}
			}
		}

		for (int i = 0; i < len_num; i++) {
			if (i == 0) {
				if (up[i + 1]) {
					return true;

				}
			} else if (i == len_num - 1) {
				if (low[i - 1]) {
					return true;
				}

			} else {
				if (low[i - 1] && up[i + 1] && nums[i - 1] <= nums[i + 1]) {
					return true;
				}
			}

		}

		return false;

	}
}

  根据题目的描述,我们定义了一个一个异常点的特征,这个点的右侧是递增,左侧是递增,而且右侧的数大于等于左侧的数,如果这个点让数组不递增,那么这个点就是一个异常点。本题就是需要寻找出所有的异常点,看看异常点的个数是否大于1.

在计算一个点左右侧是否递增的时候,可以把中间过程保存下来,减少计算次数。

原文地址:https://www.cnblogs.com/dongqiSilent/p/10779718.html

时间: 2024-11-06 07:10:19

ARTS打卡计划第二周-Algorithm的相关文章

ARTS打卡计划第二周-Review

本周review的文章是:https://medium.com/@hakibenita/optimizing-django-admin-paginator-53c4eb6bfca3 改篇文章的题目是:Optimizing Django Admin Paginator,How we finally made Django admin fast for large tables. django分页的时候,大部分时间都会消耗在求count上,本篇文章提到了几点用于提升大表分页的方法: 1.重写默认的分

ARTS打卡计划第一周-Review

本周分享的文章来自于medium的 Testing Best Practices for Java + Spring Apps 这个文章主要讲的是java测试的一些最佳实践 1.避免函数返回void,返回void不利于写单元测试,因为返回void不知道方法执行的内部情况 2.使用有意义的 assertions,可以使用  https://google.github.io/truth/ 类库 3.记得测试异常 4.可以使用变量进行多次测试 5.使用Mockito进行mock测试 原文地址:http

ARTS打卡计划第四周-ALGORITHM

866. 回文素数 求出大于或等于 N 的最小回文素数. 回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数. 例如,2,3,5,7,11 以及 13 是素数. 回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数. 例如,12321 是回文数. package com711; import java.util.ArrayList; import java.util.Collections; import java.util.List; public c

ARTS打卡计划第一周

Algorithms: https://leetcode-cn.com/problems/two-sum/ Review: https://www.infoq.cn/article/EafgGJEtqQTAa_0sP62N Q版本,慢慢雏形已经出来. Tips: c++11 : 1.nullptr   是一种特殊类型的字面值, null 指针常量,可以转换成任意其他指针类型,是一个关键字.之前的NULL是一个预处理变量,需要单独引入头文件cstdlib,其值也是0. #ifdef __cplus

三节课MINI计划第二周

任务:完成一份用户反馈的收集,并进行分析 第一步:去你能想到的公开.非公开渠道收集最近90天,至少40条和B站相关的有效用户差评反馈,并根据你对业务的理解分类整理,以表格的形式进行整理,以图片的方式提交系统. *课程导读 一.通过用户反馈发现问题 (一)通过用户反馈关注什么 1.自身产品的问题 2.竞品的问题(内部or外部) 3.可能的机会点——满足用户的需求 (二)通过哪些渠道收集用户反馈 ps:1.半公开渠道:朋友圈.微信群.用户评价 2.用户表达意愿强烈:百度手机助手.小米应用商店.豌豆荚

ARTS打卡计划第三周-Algorithm

1. 两数之和 提供了2种揭发 public class Solution1 { public int[] twoSum(int[] nums, int target) { int len=nums.length; int[] result = new int[2]; for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(nums[i]==target-nums[j]) { result[0]=i; result[1]=j; } } }

ARTS打卡计划第6周-ALGORITHM

535. TinyURL 的加密与解密 这题其实是很常见的一个开发场景,短地址的开发.我这里只是分享一种md5的方式,还有其他的生成字符串比较短的hash方式. import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; public class Codec { private HashMap<String, String> map =

ARTS打卡计划第三周-Tips

本周分享一个好用的小工具,java-faker:https://github.com/DiUS/java-faker,相应的python:https://github.com/joke2k/faker. 使用faker库,可以轻松的造假数据,再也不用担心演示的时候,假数据不好看了. java版本使用很简单,引入依赖: <dependency> <groupId>com.github.javafaker</groupId> <artifactId>javafa

ARTS打卡计划第6周-REVIEW-超越编码的避免项目失败的软技能

https://medium.com/@viral_shah/beyond-coding-soft-skills-to-avoid-project-failures-4ed7821fa93a 做项目中经常听到如下的抱怨不: 1.客户在后面更改了需求了,导致整个项目延期,这不是我们的锅. 2.系统设计时候,不是这样使用的,是他们不会用 3.我们的系统太专业太复杂了,他们不会明白如何使用的 4.我们提前都说了,系统还没有准备好,但是他们还是发布上线了 5.我们开发了一套牛逼的系统,但是销售却不知道如