入口

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 :最大子数组和 「算法中的哲学」的更多相关文章

  1. 2014华为机试西安地区B组试题

    2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...

  2. 华为机试001:字符串最后一个单词的长度(华为OJ001)

    华为机试 字符串最后一个单词的长度 计算字符串最后一个单词的长度,单词以空格隔开. 提交网址: http://www.nowcoder.com/practice/8c949ea5f36f422594b ...

  3. 2014华为机试西安地区A组试题

    2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...

  4. 华为机试ACM(字符组合问题)

    今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...

  5. 【算法导论C++代码】最大子数组

    #define Inf 65535 #include <iostream> using namespace std; void FindMaxCrossingSubarray(int *A ...

  6. 华为机试正式版(西安c/c++/java),今天下午去机试的题目,新奇出炉了!

    下面题目都是回顾的.题目都非常easy, 大家有些基础就能够參加!(语言能够是c/c++.也能够是java的) 题目一(60分): 字符串操作. 将小写转换成大写, 将大写转化为小写, 数字的不做转换 ...

  7. 华为机试_字符串识别_Vector的使用;

    第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu  ...

  8. 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试

    import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...

  9. 2015华为机试——数字基root

    题目描写叙述: 求整数的Root:给定正整数,求每位数字之和;假设和不是一位数,则反复; 输入:输入随意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行相 ...

  10. 华为机试 之 joseph环

    一:首先科普一下约瑟夫问题的数学方法 (1)  不管是用list实现还是用vector实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比較烦,并且时间复杂度高达O(nm),当n,m很大(比如上百 ...

随机推荐

  1. 基于STC8G1K08的CH549单键进入USB下载模式实验

    一.实验原因 CH552或CH549进入USB下载,通常需要两个按键,一个控制电源的通断,一个通过串联电阻(一头接VCC或V33)冷启动时抬高UDP电平.时序上是这样的:断电--按下接UDP的轻触开关 ...

  2. 6种微服务RPC框架-copy

    一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的. 跟语言平台绑定的开源 RPC 框架主要有下面几种. Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末 ...

  3. w3cschool-Spring Security

    https://www.w3cschool.cn/springsecurity/na1k1ihx.html Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤 ...

  4. typedef的最新理解

    1.typedef的常规用法 typedef unsigned int  UNIT; UINT b; 需要注意的地方有下面几点: ①define 前面替代后面, typedef后面替代前面,这个不要记 ...

  5. C:.c文件和.h文件的关系

    参考:1      2 问题 在进行C语言文件移植时,遇到 "通常是每个.c文件对应一个.h文件",之前了解过.h文件是头文件,用来引用其他文件的, 但在codeblocks C语 ...

  6. 近期最值得关注的AI技术报告与Agent综述!

    写在前面 如题,近期优秀的大模型层出不穷.作为技术人,需要阅读高质量的AI技术报告或论文,并且掌握未来应用趋势.本文将推荐一些高质量的AI技术报告,以及Agent智能体综述. 大模型技术报告 Deep ...

  7. AI+算力,赋予天翼云数字人“最强大脑”!

    3月31日至4月1日,以"音视频+无限可能"为主题的LiveVideoStackCon 2022音视频技术大会(北京站)圆满举办.天翼云科技有限公司AI产品研发总监陈金出席&quo ...

  8. 表治理-Iceberg过期快照清理

    总结 指标 清理前(已优化小文件) 清理后 查询速度 13秒 15秒(波动) 表总大小 26.4G 17.2G metadata目录文件数 75 42 data目录文件数 1501 602 !!!需要 ...

  9. 接口响应指标的p99、p95、p50到底是什么?

    一.简介 我们对服务响应时间的衡量指标有Min(最小响应时间).Max(最大响应时间).Avg(平均响应时间)等,P99.P90也是衡量指标 二.指标简介 1.平均值Avg 其中比较常用的值就是平均值 ...

  10. Luogu P2824 排序 题解 [ 紫 ] [ 线段树 ] [ 二分 ] [ adhoc ]

    排序:二分线段树神仙好题. trick 我们可以二分值域,然后把大于等于它的数标记成 \(1\),其他标记为 \(0\)(有些题需要标记成 \(-1\) ),然后根据这个来 check 方案是否可行, ...