重塑矩阵(java实现)
力扣 566. 重塑矩阵题目说明在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
给定矩阵的宽和高范围在 [1, 100]。
给定的 r 和 c 都是正数。
示例例1123456789输入: nums = [[1,2], [3,4]]r = 1, c = 4输出: [[1,2,3,4]]解释:行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。
例212345678910输入: nums = [[1,2], [3,4]]r = 2, c = 4输出: [[1,2], [3,4]]解释:没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。
笔者理解此题是一道数组算法问题,在力扣题库中被定义 ...
数组拆分I(java实现)
力扣 561. 数组拆分 I题目说明给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。
返回该 最大总和 。
1 <= n <= 104
nums.length == 2 * n
-104 <= nums[i] <= 104
示例例11234567输入:nums = [1,4,3,2]输出:4解释:所有可能的分法(忽略元素顺序)为:1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 32. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 33. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4所以最大总和为 4
例2123输入:nums = [6,2,6,5,1,2]输出:9解释:最优的分法为 (2, 1), (2, 5), (6 ...
最大连续1的个数
力扣 485. 最大连续1的个数题目说明给定一个二进制数组, 计算其中最大连续1的个数。
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
示例例1123输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3
笔者理解此题是一道数组算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题理解起来比较容易,直接动态更新连续1串长度最大值即可,让我们来看看具体如何实现的吧。
实现123456789101112131415161718192021222324public int findMaxConsecutiveOnes(int[] nums) { int result = 0; //暂存当前最大值 int tick = 0; //标记连续1个数 for(int i=0;i<nums.length;i++){ if(nums[i]==0){ ...
找到所有数组中消失的数字(java实现)
力扣 448. 找到所有数组中消失的数字题目说明给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
示例例112345输入:[4,3,2,7,8,2,3,1]输出:[5,6]
笔者理解此题是一道数组算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题理解起来比较容易,但是如何巧妙的不借助多余空间来达到得到未出现数需要好好想想,让我们来看看具体如何实现的吧。
实现12345678910111213141516171819202122232425public List<Integer> findDisappearedNumbers(int[] nums) { List <Integer>result = new ArrayList<Integer>(); ...
数据流中的第K大元素(java实现)
力扣 703. 数据流中的第 K 大元素题目说明设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。
请实现 KthLargest 类:
KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。
int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。
示例例112345678910111213输入:["KthLargest", "add", "add", "add", "add", "add"][[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]输出:[null, 4, 5, 5, 8, 8]解释:KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);kthLargest.add(3); // return ...
初识javaweb
javawebjava web
1.1、基本概念web开发:
web,网页的意思,类似于www.baidu.com
静态web
html,css
展示出的数据不会变化
动态web
淘宝等等,几乎所有网站
会发生变化,不同时间,不同地点看到的信息各不相同
技术栈:Servlet/JSP,ASP,PHP
在java中,动态web资源开发的技术通常为javaweb。
1.2、web应用程序web应用程序:可以提供浏览器访问的程序
a.html、b.html……多个web资源,这些资源可以被外界访问,对外提供服务;
你们能访问到的任何一个页面或者资源,都真实存在某一台电脑上
URL:统一资源定位器
这个统一的web资源会被放在同一个文件夹下,web应用程序–>Tomcat:服务器
一个web应用由多个部分组成(静态web,动态web)
html,css,js
jsp,servlet
java程序
jar包
配置文件(Properties)
web应用程序编写结束后,若是想提供给外界访问:需要一个服务器来统一管理
1.3、静态web
*.htm, * ...
字符串的排列(java实现)
力扣 567. 字符串的排列题目说明给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
输入的字符串只包含小写字母
两个字符串的长度都在 [1, 10,000] 之间
示例例1123输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").
例212输入: s1= "ab" s2 = "eidboaoo"输出: False
笔者理解此题是一道数组求解算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,发现此题比较直接,用滑动的窗口来存储s2中的一段字符串,然后比较窗口和s1中字母出现次数是否相等即可,
用一个大小26的数组当作字典来存储s1和s2窗口中字母出现的次数。
实现12345678910111213141516171819202122public boolean checkInclusion(String ...
非递减数列(java实现)
力扣 665. 非递减数列题目说明给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
1 <= n <= 10 ^ 4
- 10 ^ 5 <= nums[i] <= 10 ^ 5
示例例1123输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
例2123输入: nums = [4,2,1]输出: false解释: 你不能在只改变一个元素的情况下将其变为非递减数列。
笔者理解此题是一道数组求解算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题比较直接,但是需要注意几点:
此题中提到的非递减序列并非指递增序列
要注意改变一次是改变数组中的哪一个数
每一次改变都要尽量保持数组非递减
实现1234567891011121314151617181920212 ...
子数组最大平均数I(java实现)
力扣 643. 子数组最大平均数 I题目说明给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
1 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。
示例例1123输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
例2123输入:[0,4,0,3,2], k = 1输出:4解释:最大数为4, 答案为 4。
笔者理解此题是一道数组求解算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题比较直接,只要求出移动窗口的最大值即可。
实现12345678910111213141516public double findMaxAverage(int[] nums, int k) { double result = 0; int temp = 0; //暂存当前计算到的序列的和 for (int i = 0; i < ...
替换后的最长重复字符(java实现)
力扣 424. 替换后的最长重复字符题目说明给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
字符串长度 和 k 不会超过 10的4次方。
示例例1123输入:s = "ABAB", k = 2输出:4解释:用两个'A'替换为两个'B',反之亦然。
例212345输入:s = "AABABBA", k = 1输出:4解释:将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。子串 "BBBB" 有最长重复字母, 答案为 4。
笔者理解此题是一道数组求解算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,发现此题需要用到窗口的概念,我们只需要保证窗口内的元素符合题意,经过窗口移动,然后再比较存储窗口的最大区间值即可。
窗口:有头有尾的一段区间。
符合题意:窗口内元素符合 有限个数字符替换后 变 ...








