array专题

581 Shortest Unsorted Continuous Subarray

问题:这道题目感概颇多,作为第一个array的简单题目就被缠住了。具体内容写在注释里面了。

217 Contains Duplicate

问题:这道题目可以看出有效的数字组合就是0,10,11三种组合。当遍历到某一位是0,下标加1;某一位是1,下标加2.如果到最后只剩下最后一位,并且是0,返回true。
学习:我用递归实现的,看了一个方法用循环实现了,代码简洁。

public boolean isOneBitCharacterV2(int[] bits) {int n = bits.length;int i = 0;while (i < n - 1) {if (bits[i] == 0)i++;elsei += 2;}return i == n - 1;}

代码

118 Pascal’s Triangle

问题:利用杨辉三角形的性质
1 杨辉三角形以正整数构成,数字左右对称,每行由1主键变大,然后变小,变回1;
2 第n行,数字个数为n;
3 第n行,第k个数字为组合数C(k1)(n1)C(n−1)(k−1)
4 除每行最左侧与最右侧元素外,每个数字等于它的左上方与右上方数字之和。
代码

695 Max Area of Island

问题:计算小岛的最大面积,与 85 最大矩形面积的区别是:岛的面积只要连通就行,不一定要形成矩形。体现在深度优先搜索上不同。这道题目的精妙还在计算过就让grid[i][j] = 0,这样就不会重复计算了。这是我没有想到的。
代码

628 Maximum Product of Three Numbers

问题:题目的输入是一个整数数组,有正数,有负数。要求输出这些数组中任意三个数字乘积的最大值。
我的想法:最大乘积或者是三个最大正数的乘积,或者是两个具有最大绝对值的负数乘以最大的正数。那么我是不是可以按照数字的绝对值从大到小排序。然后找前三个数字相乘就可以。可以吗?不可以。因为是按照绝对值排序的,所以如果前三个数字恰好都是正数,那也罢了。如果其中一个,原来的数是负数,这个结果就不对了。
学习:思路的第一句是对的。只是处理方法不对。不应该按照数组元素的绝对值排序,这样之后再也找不到对应的原数字,会出问题。应该看到两个具有最大绝对值的负数就是整个数组中最小的两个数。如果能看到这个,就能找到解决方法了。

public int maximumProductV3(int[] nums) {Arrays.sort(nums);int n = nums.length;return Math.max(nums[0]*nums[1]*nums[n-1], nums[n-1]*nums[n-2]*nums[n-3]);}

学习2:最大乘积或者是三个最大正数的成绩,或者是两个具有最大绝对值的负数乘以最大的正数。对这句话可以再理解:找到最大的三个数max1,max2,max3,最小的两个数min1,min2。这应该一次循环就可以搞定,无需排序。有时候离成功就是那么近,目标设立对了,方法却错了。

public int maximumProductV2(int[] nums) {int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;for (int num : nums) {if (num > max1) {max3 = max2;max2 = max1;max1 = num;}else if(num > max2){max3 = max2;max2 = num;}else if(num > max3){max3 = num;}if (num < min1) {min2 = min1;min1 = num;}else if(num<min2){min2 = num;}}return Math.max(max1 * max2 * max3, min1 * min2 * max1);}

代码

414 Third Maximum Number

问题:题目简单,只要注意第三大数字=第三大不同的数字,注意去重。而且题目还给了一组最小的数字-2146473648.

 public int thirdMax(int[] nums) {int max1 = Integer.MIN_VALUE,max2=Integer.MIN_VALUE,max3=Integer.MIN_VALUE;int cnt = 0;boolean minvalue = true;for(int num:nums){if (num > max1) {max3 = max2;max2 = max1;max1 = num;cnt++;}else if(num > max2 && num!=max1){max3 = max2;max2 = num;cnt++;}else if(num > max3 && num!=max1 && num!=max2){max3 = num;cnt++;}else if(num==Integer.MIN_VALUE && minvalue){cnt++;minvalue = false;}}return cnt<3?max1:max3;}

643 Maximum Average Subarray I

问题:要找到长度为k的平均值最大的子数组的平均值。只要找到符合条件的子数组即可。题目可以先用for循环,指定子数组的起始位置、结束位置计算;然后会发现超时,为了减少重复的加和步骤,使用滑动窗口的方式。这种窗口滑动的方式在nlp的算法和深度学习中都有使用。

public double findMaxAverageV3(int[] nums, int k) {int n = nums.length;int sum = 0;for (int i = 0; i < k; i++) {sum += nums[i];}int maxSum = sum;for (int i = k; i < n; i++) {sum += nums[i] - nums[i - k];maxSum = Math.max(maxSum, sum);}return (maxSum+0.0)/k;}

448 Find All Numbers Disappeared in an Array

问题:题目简单。输入一个数组,数组元素是[1,n],n是数组长度。有些元素可能重复,有些元素可能没出现。返回没有出现的元素。要求不用额外的空间,用O(n)时间复杂度完成。
我的思路:先使用一个新数组data,长度为n+1。遍历入参nums,设置data[nums[i]]=1。最后遍历data[i]=1就表示i出现过,否则就没有出现。所以关键是标记出出现的元素。可以用数组下标和出现的元素关联起来。如果没有新数组data,那就在原数组nums上做修改。修改的方式有很多种,例如设置为0,设置为负数,原数组值+n等等。我自己实现的修改数组值为0,方式不够漂亮,参考了原数组值+n的方式。
代码

724 Find Pivot Index

问题:从左向右一次选择pivot的index 当选择pivot index 为i的时候leftsum=sum(0,i-1),rightsum=sum(i+1,n-1) ;当选择pinot index 为(i+1)的时候,leftsum=sum(0,i)=sum(0,i-1)+a[i] rigtsum=sum(i+2,n-1)=sum(i+1,n-1)-a[i+1]。注意:左边可以是0个元素,右边也可以是0个元素
学习:更加简洁版本。leftsum + rightsum + nums[i] = sum,所以leftsum和rightsum只要计算一个就可以。只是没有想明白为什么这个版本更慢了。(pivotIndexV2)
代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三十二期:MySQL常见的图形化工具

MySQL作为一款非常流行的、开源的关系型数据库&#xff0c;应用非常广泛。因为MySQL开源的缘故&#xff0c;图形化管理维护工众多&#xff0c;除了系统自带的命令行管理工具之外&#xff0c;还有许多其他的图形化管理工具&#xff0c;这里介绍几个经常使用的MySQL图形化管理工具…

centos7 源码安装goaccess

1. 使用yum安装在不同服务器上可能失败, 推荐使用源码安装goaccess # 安装依赖 yum install -y ncurses-devel GeoIP-devel.x86_64 tokyocabinet-devel openssl-devel# 下载源码包并安装 cd /usr/local/software wget http://tar.goaccess.io/goaccess-1.3.tar.gz tar -xvf goa…

【数据结构与算法】字符串匹配 BM算法

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 BM算法 BM算法的核心思想是通过将模式串沿着主串大踏步的向后滑动&#xff0c;从而大大减少比较次数&#xff0c;降低时间复杂度。而算法的关键在于如何兼顾步子迈得足够大与无遗漏&…

array专题2---理解暴力枚举与动态规划

746 Min Cost Climbing Stairs 一直以后对暴力枚举&#xff08;又称&#xff1a;深度优先搜索&#xff09;和动态规划不太理解&#xff0c;不能明白个中区别&#xff0c;更别说贪心。今天做这道题目的时候有点心得。 思路一&#xff1a;看到题目&#xff0c;直觉告诉我暴力枚…

第五十八期:AI艺术日渐繁荣,未来何去何从?

本文的配图都是AI艺术领域领导者、德国艺术家马里奥克林格曼(Mario Klingemann)利用人工智能创作的作品。 利用人工智能创作而成的画作近年来越来越受瞩目&#xff0c;有的作品甚至能在知名拍卖行拍得高价。但这类作品仍有不少问题需要解答&#xff0c;比如它的作者是开发出算…

【数据结构与算法】字符串匹配 KMP 算法

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 KMP 算法 KMP 算法是根据三位作者&#xff08;D.E.Knuth&#xff0c;J.H.Morris 和 V.R.Pratt&#xff09;的名字来命名的&#xff0c;算法的全称是 Knuth Morris Pratt 算法&#x…

array专题3-一道题目不断分析就会慢慢有了思路

#697 Degree of an Array 我承认慢慢有了思路的前提是你要见过那些解法&#xff0c;否则怎么想也想不到。多做题目&#xff0c;就像是多看书一样重要。 问题&#xff1a;一个数组的度这个数组中出现次数最多元素的出现次数。要找的是最短的子数组&#xff0c;而这个数组的度原数…

第五十九期:商用数据库之死:Oracle 面临困境

作者&#xff1a;John Freeman、Fred McClimans 和 Zach Mitchell 我们预计到 2021 年&#xff0c;年产值 296 亿美元的商业数据库市场会收缩 20% 至 30%&#xff0c;认为 Oracle 无法让收入来源足够快地实现转型&#xff08;从传统的商业数据库转向基于云的订购产品&#xff0…

基于上一篇AS项目依赖库问题的优化解决方案

//TODO 转载于:https://www.cnblogs.com/Jhon-Mr/p/10839548.html

【数据结构与算法】【应用】字符串匹配

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 一、单模式串匹配&#xff1a; BF&#xff1a; 简单场景&#xff0c;主串和模式串都不太长, O(m*n)KP&#xff1a;字符集范围不要太大且模式串不要太长&#xff0c; 否则hash值可能冲…

第六十期:华为:希望把VR/AR打造成下个智能手机产业

网易科技讯 10 月 19 日消息&#xff0c;2019 世界 VR 产业大会在江西省南昌市举行。华为轮值董事长郭平发表了《打造 VR/AR 信息高速公路&#xff0c;支撑产业繁荣》的主题演讲。郭平认为&#xff0c;VR/AR 将成为 5G 时代的首批应用&#xff0c;与 5G 产业发展节奏高度匹配并…

array专题4

674 Longest Continuous Increasing Subsequence 问题&#xff1a;比较简单&#xff0c;直接看代码。问题是速度更快的代码是什么样子&#xff1f; 代码 665 Non-decreasing Array 思路&#xff1a;非降序数组&#xff0c;能有一次修改的机会。那就是查找 array[i1]<arr…

零基础入门stm32需要学这些东西

1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解&#xff0c;请立即阅读STM32的文档&#xff0c;以获取最基本的知识点。 如果你手上拥有ST官方主推的STM32神舟系列的板子&#xff0c;那么光盘都会配好这些文档&#xff0c;ST…

【数据结构与算法】字符串匹配 AC自动机

单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法多模式串匹配算法 Trie 树和 AC 自动机 AC 自动机 AC 自动机实际上就是在 Trie 树之上&#xff0c;加了类似 KMP 的 next 数组&#xff0c;只不过此处的 next 数组是构建在树上罢了。 AC 自动机的构建 将多个模式串构建成…

第六十一期:中国农民花3000块,发明史上最牛输入法!曾火遍中国20年

投递人 itwriter “王旁青头戋(兼)五一&#xff0c;土十二干士寸雨” 如果你还能熟练的背出这段口诀&#xff0c;恭喜你&#xff0c;又暴露年龄了。 倒回到十几年前&#xff0c;在刀哥被老师带到穿鞋套才能进神秘的机房&#xff0c;练习打字的时候&#xff0c;会五笔的人简直是…

数学归纳法证明Nicomachus's Theorem

今天看了《计算机程序设计艺术卷1》的部分内容。也希望更深入了解一下数学归纳法。所以将网页基本算重新写了一遍&#xff0c;写下证明过程。 理论Theorem 1311312335233533791133791143131517194313151719… 总的来说&#xff1a; ∀n∈N>0,n3∑ni1(n2−n2∗i−1)(n2−n…

第六十二期:腾讯云发布“小程序·云开发十大优秀实践”:猫眼、唯品会等入选

作者&#xff1a;周小白 【TechWeb】10 月 19 日消息&#xff0c;今日&#xff0c;腾讯云首次对外公布了“小程序云开发十大优秀实践”&#xff0c;包括白鹭引擎、千墨科技、腾讯新闻、即速应用、微盟、唯品会、猫眼、香格里拉、微信读书、微信支付等&#xff0c;涉及多个行业。…

[Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

【问题描述】[中等] 【解答思路】 用哈希表/数组存储每个数字对应的所有可能的字母&#xff0c;然后进行回溯操作。 回溯过程中维护一个字符串&#xff0c;表示已有的字母排列&#xff08;如果未遍历完电话号码的所有数字&#xff0c;则已有的字母排列是不完整的&#xff09;…

(68)zabbix windows性能计数器使用详解

概述 windows下的性能计数器让zabbix监控更加轻松&#xff0c;直接获取性能计数器的数值即可完成windows监控。性能计数器如下&#xff1a; 1perf_counter["\Processor(0)\Interrupts/sec"]或 1perf_counter["\Processor(0)\Interrupts/sec", 10]获取所有性…

欧几里得算法以及推论

欧几里得算法euclids algorithm 欧几里得算法又称辗转相除法&#xff0c;用于计算两个正整数a、b的最大公约数(greatest common divisor)。计算公式gcd(a,b) gcd(b, a%b)。用于RSA加密。 证明过程&#xff1a;参见 欧几里得算法扩展 给定两个正整数a、b&#xff0c;在计算…