【LEETCODE】57、数组分类,适中级别,题目:969、442、695
package y2019.Algorithm.array.medium; import java.util.ArrayList;
import java.util.List; /**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.array.medium
* @ClassName: PancakeSort
* @Author: xiaof
* @Description: TODO 969. Pancake Sorting
* Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.length,
* then reverse the order of the first k elements of A.
* We want to perform zero or more pancake flips (doing them one after another in succession) to sort the array A.
*
* Return the k-values corresponding to a sequence of pancake flips that sort A.
* Any valid answer that sorts the array within 10 * A.length flips will be judged as correct.
*
* Input: [3,2,4,1]
* Output: [4,2,4,3]
* Explanation:
* We perform 4 pancake flips, with k values 4, 2, 4, and 3.
* Starting state: A = [3, 2, 4, 1]
* After 1st flip (k=4): A = [1, 4, 2, 3]
* After 2nd flip (k=2): A = [4, 1, 2, 3]
* After 3rd flip (k=4): A = [3, 2, 1, 4]
* After 4th flip (k=3): A = [1, 2, 3, 4], which is sorted.
*
* 参考:https://blog.csdn.net/fuxuemingzhu/article/details/85937314
*
* @Date: 2019/7/16 8:57
* @Version: 1.0
*/
public class PancakeSort { public List<Integer> solution(int[] A) {
//思路是这样的,就是每次吧最大的做一个翻转,移动到最前面,然后再翻转到最后面,这样每次都可以从数据中排除掉最大的那个
//但是由于这个题的数字都是按照1~n的顺序给的值,那么就不需要每次都取最大值,只要取index索引就可以了
List<Integer> res = new ArrayList<>();
for(int i = A.length, x; i > 0; --i) {
//寻找最大的位置
for(x = 0; A[x] != i; ++x);
//当x所在的索引跟当前应该的最大值相等的时候,也就是x指向了最大值的位置的-1位置,我们翻转两次
//第一次吧值翻转到最前面,第二次翻转到最后面
reverse(A, x);
res.add(x + 1);
//然后翻转到对应的位置
reverse(A, i - 1);
res.add(i);
} return res;
} private void reverse(int[] A, int k) {
//翻转k位
for(int i = 0, j = k; i < j; ++i,--j) {
//前后交换
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
} public static void main(String[] args) {
int data[] = {3,2,4,1};
PancakeSort fuc = new PancakeSort();
System.out.println(fuc.solution(data));
System.out.println();
} }
package y2019.Algorithm.array.medium; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set; /**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.array.medium
* @ClassName: FindDuplicates
* @Author: xiaof
* @Description: TODO 442. Find All Duplicates in an Array
* Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
* Find all the elements that appear twice in this array.
* Could you do it without extra space and in O(n) runtime?
*
* Input:
* [4,3,2,7,8,2,3,1]
* Output:
* [2,3]
*
* 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。
* 找到所有出现两次的元素。
* 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?
* @Date: 2019/7/16 9:00
* @Version: 1.0
*/
public class FindDuplicates { public List<Integer> solution(int[] nums) { //直接用set
List<Integer> res = new ArrayList<>();
if(nums == null || nums.length <= 0) {
return res;
}
//受限还是排序
Arrays.sort(nums);
//遍历一次
int preValue = nums[0];
for(int i = 1; i < nums.length; ++i) {
int curValue = nums[i];
if(preValue == curValue) {
res.add(curValue);
} else {
preValue = curValue;
}
} return res;
}
}
package y2019.Algorithm.array.medium; /**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.array.medium
* @ClassName: MaxAreaOfIsland
* @Author: xiaof
* @Description: TODO 695. Max Area of Island
* Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land)
* connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.
*Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)
*
* [[0,0,1,0,0,0,0,1,0,0,0,0,0],
* [0,0,0,0,0,0,0,1,1,1,0,0,0],
* [0,1,1,0,1,0,0,0,0,0,0,0,0],
* [0,1,0,0,1,1,0,0,1,0,1,0,0],
* [0,1,0,0,1,1,0,0,1,1,1,0,0],
* [0,0,0,0,0,0,0,0,0,0,1,0,0],
* [0,0,0,0,0,0,0,1,1,1,0,0,0],
* [0,0,0,0,0,0,0,1,1,0,0,0,0]]
* Given the above grid, return 6. Note the answer is not 11, because the island must be connected 4-directionally.
*
* 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
* 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/max-area-of-island
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*
* @Date: 2019/7/16 9:00
* @Version: 1.0
*/
public class MaxAreaOfIsland { public int solution(int[][] grid) {
//寻找聚集度最高的和,遍历所有的岛屿,然后对附近的所有1求和,每次求和探索四个位置的和,上下左右
int maxIsland = 0;
for(int i = 0; i < grid.length; ++i) {
for(int j = 0; j < grid[i].length; ++j) {
//求出最大的岛屿
maxIsland = Math.max(maxIsland, areaOfIsLand(grid, i, j));
}
}
return maxIsland;
} private int areaOfIsLand(int[][] grid, int x, int y) {
if(x >= 0 && x < grid.length && y >=0 && y < grid[x].length && grid[x][y] == 1) {
//设置标记
grid[x][y] &= 0;
return 1 + areaOfIsLand(grid, x - 1, y) + areaOfIsLand(grid, x + 1, y) + areaOfIsLand(grid, x, y - 1) + areaOfIsLand(grid, x, y + 1);
} return 0;
} }
【LEETCODE】57、数组分类,适中级别,题目:969、442、695的更多相关文章
- LeetCode:颜色分类【75】
LeetCode:颜色分类[75] 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 ...
- LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)
这是悦乐书的第365次更新,第393篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第227题(顺位题号是961).在大小为2N的数组A中,存在N+1个唯一元素,并且这些元 ...
- LeetCode:数组中的第K个最大元素【215】
LeetCode:数组中的第K个最大元素[215] 题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: ...
- LeetCode: 57. Insert Interval(Hard)
1. 原题链接 https://leetcode.com/problems/insert-interval/description/ 2. 题目要求 该题与上一题的区别在于,插入一个新的interva ...
- LeetCode一维数组的动态和
一维数组的动态和 题目描述 给你一个数组 nums.数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]...nums[i]). 请返回 nums 的动态和. 示例 1: ...
- 【LEETCODE】61、对leetcode的想法&数组分类,适中级别,题目:162、73
这几天一直再想这样刷题真的有必要么,这种单纯的刷题刷得到尽头么??? 这种出题的的题目是无限的随便百度,要多少题有多少题,那么我这一直刷的意义在哪里??? 最近一直苦苦思考,不明所以,刷题刷得更多的感 ...
- 【LEETCODE】60、数组分类,适中级别,题目:75、560、105
package y2019.Algorithm.array.medium; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.a ...
- 【LEETCODE】58、数组分类,适中级别,题目:238、78、287
package y2019.Algorithm.array.medium; import java.util.Arrays; /** * @ProjectName: cutter-point * @P ...
- 【LEETCODE】55、数组分类,适中级别,题目:79、611、950
第950题,这题我是真的没想到居然会说使用队列去做,大神的答案,拿过来瞻仰一下 package y2019.Algorithm.array; import java.util.HashMap; imp ...
随机推荐
- 回归模型的性能评价指标(Regression Model Performance Evaluation Metric)
回归模型的性能评价指标(Performance Evaluation Metric)通常有: 1. 平均绝对误差(Mean Absolute Error, MAE):真实目标y与估计值y-hat之间差 ...
- 【JZOJ6206】【20190610】二分图边染色
题目 对一个二分图的边染色,满足有相同端点的边的颜色一定不同; 设最优染色为\(C\) ,你的染色为\(X\),只需要满足$ X \le 2^ {\lceil log C \rceil }$ ...
- GoCN每日新闻(2019-10-14)
GoCN每日新闻(2019-10-14) 1. 基于 Go 开源项目 MIMIO 的对象存储方案在探探的实践 https://mp.weixin.qq.com/s/YIKB_qAqqy6ydtFT_a ...
- hdu1702 ACboy needs your help again![简单STL 栈 队列]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu1702 题干 代码和解释 本题很简单,只要掌握STL stack和STL vector的语法即可作答.记录本题是为了记录STL vector的 ...
- Django入门——《Python编程从入门到实践》
Django是一个Web框架--一套用于帮助开发交互式网站的工具.Django能够响应网页请求,还能让你更轻松地读写数据库.管理用户等. 1.建立项目 开始编写一个名为"学习笔记" ...
- ListView中嵌入布局的Button或多个点击事件
有时候在ListView嵌入的布局中有多个事件需要点击,比如一个item中有TextView和Button两个布局,当我们需要获取这两个点击事件时,我们应该如何去获取呢,通常来说,我们都是已经固定好了 ...
- 如何获取select下拉框中option选中的文本值
$(select的id或者class).change(function(){ $(this).find("option:selected").text() }) 源文:https: ...
- index row size 2720 exceeds maximum 2712 for index "xxx" ,Values larger than 1/3 of a buffer page cannot be indexed.
记录一个bug情况: 我有个表NewTable,复合主键(slaveid,resid,owner) CREATE TABLE "public"."NewTable&quo ...
- BDD介绍
TDD: TDD(Test-Drivern Development)测试驱动开发,是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代 ...
- (转)nginx 安全配置文档
原文:https://www.cnblogs.com/heaven-xi/p/9961357.html#top 1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系 ...