[每日算法 - 华为机试] leetcode53 :最大子数组和 「算法中的哲学」
入口
53. 最大子数组和
https://leetcode.cn/problems/maximum-subarray/
题目描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:输入:nums = [1]
输出:1
示例 3:输入:nums = [5,4,-1,7,8]
输出:23
方法一:贪心
方法思路:若当前指针之前元素和小于当前元素,则丢弃之前元素。
leetCode热评 道题目的思想是: 走完这一生 如果我和你在一起会变得更好,那我们就在一起,否则我就丢下你。 我回顾我最光辉的时刻就是和不同人在一起,变得更好的最长连续时刻
import java.lang.Math;
class Solution {
public int maxSubArray(int[] nums) {
int maxNum = nums[0], curNum = nums[0];
for(int i=1;i<nums.length;i++){
//’ nums[i] ‘就是新人,他的出现能让我俩比旧人更久的相处更好
curNum = Math.max(nums[i],curNum + nums[i]);//不再计算之前元素的和,不就是一种抛弃
maxNum = Math.max(curNum,maxNum); //以后的和都是和新的人计算
}
return maxNum;
}
}
空间复杂度:O(N)
时间复杂度: O(1)
方法二:动态规划
方法思路:若前一个元素大于0,则将其加到当前元素上。这就想阿德勒心理学中的目的论:我不会受过去影响,我选择了现在的我,只有过去是正向的,才会是我的一部分!
import java.util.Arrays;
class Solution {
public int maxSubArray(int[] nums) {
for(int i = 1;i<nums.length;i++){
//阿德勒心理学:目的论(我不会受过去影响,我选择了现在的我)
if(nums[i-1] > 0) nums[i] = nums[i-1]+nums[i];//只有过去是正向的,才会是我的一部分
}
Arrays.sort(nums);
return nums[nums.length-1];
}
}
空间复杂度:O(N)
时间复杂度: O(1)
[每日算法 - 华为机试] leetcode53 :最大子数组和 「算法中的哲学」的更多相关文章
- 2014华为机试西安地区B组试题
2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...
- 华为机试001:字符串最后一个单词的长度(华为OJ001)
华为机试 字符串最后一个单词的长度 计算字符串最后一个单词的长度,单词以空格隔开. 提交网址: http://www.nowcoder.com/practice/8c949ea5f36f422594b ...
- 2014华为机试西安地区A组试题
2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...
- 华为机试ACM(字符组合问题)
今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...
- 【算法导论C++代码】最大子数组
#define Inf 65535 #include <iostream> using namespace std; void FindMaxCrossingSubarray(int *A ...
- 华为机试正式版(西安c/c++/java),今天下午去机试的题目,新奇出炉了!
下面题目都是回顾的.题目都非常easy, 大家有些基础就能够參加!(语言能够是c/c++.也能够是java的) 题目一(60分): 字符串操作. 将小写转换成大写, 将大写转化为小写, 数字的不做转换 ...
- 华为机试_字符串识别_Vector的使用;
第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述: 拼音 yi er san si wu liu qi ba jiu ...
- 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试
import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...
- 2015华为机试——数字基root
题目描写叙述: 求整数的Root:给定正整数,求每位数字之和;假设和不是一位数,则反复; 输入:输入随意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行相 ...
- 华为机试 之 joseph环
一:首先科普一下约瑟夫问题的数学方法 (1) 不管是用list实现还是用vector实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比較烦,并且时间复杂度高达O(nm),当n,m很大(比如上百 ...
随机推荐
- 使用 NodeLocalDNS 提升集群 DNS 性能和可靠性
本文主要分享如何使用 NodeLocal DNSCache 来提升集群中的 DNS 性能以及可靠性,包括部署.使用配置以及原理分析,最终通过压测表明使用后带来了高达 50% 的性能提升. 1.背景 什 ...
- 第四章 对称加密算法--DES--AES--IDEA--PBE
10.1.DES 已破解,不再安全,基本没有企业在用了 是对称加密算法的基石,具有学习价值 密钥长度56(JDK).56/64(BC) 10.2.DESede(三重DES) 早于AES出现来替代DES ...
- DVWA靶场Authorisation Bypass (未授权绕过) 漏洞通关教程及源码审计
Authorisation Bypass 授权绕过(Authorisation Bypass)是一种严重的安全,通过利用系统的或错误配置,绕过正常的访问控制机制,获得未经授权的访问权限.这种可能导致敏 ...
- TDGO(灯塔狩猎者)—一款分布式灯塔信息收集工具
GitHub: https://github.com/lxflxfcl/DTGO 作者语:嘘,我正在狠狠鞭打你的灯塔 DTGO (灯塔收割者) 是一个用于批量管理和监控资产灯塔系统任务的图形化工具.它 ...
- 云内GSLB技术及应用场景
本文分享自天翼云开发者社区<云内GSLB技术及应用场景>,作者:c****n 云业务容灾建设节奏一般是同城双活-异地双活-两地三中心(同城双活+异地多活),因为要解决的问题的复杂度和难度也 ...
- 安装和配置CentOS9
安装和配置CentOS9 一.下载CentOS9镜像文件 1.访问官网:首先,你需要访问CentOS的官网或阿里云镜像网站 2.选择版本:在官网上,选择CentOS9的64位操作系统版本进行下载. 3 ...
- DC/DC layout建议
DCDC电路的重要性不言而喻,不合理的PCB Layout会造成芯片性能变差,甚至损坏芯片.如:线性度下降.带载能力下降.工作不稳定.EMI辐射增加.输出噪声增加等. 环路面积最小原则 DC/DC电路 ...
- WPF程序性能优化总结
原文链接: https://blog.csdn.net/u010265681/article/details/77571947 WPF程序性能由很多因素造成,以下是简单地总结: 元素: 1. 减少需要 ...
- python 输入与输出函数,格式化输出,注释,变量,整数,浮点数,字符串,布尔等说明
python 输入函数:input 语法:input("提示文字") 注意:用input输入的内容都是字符串: 输出函数:print 语法:print() -------- ...
- 硅基流动最新邀请码:9MqV8tO4
硅基流动最新邀请码:9MqV8tO4 硅基流动最新邀请码:9MqV8tO4