array专题9

新的一周,新的专题。array的中等难度的题目快要结束了。能感觉到进步,也依然能感觉到吃力。加油。

31 Next Permutation

思路:读懂了题意,知道是要求下一个排列数是什么。如果已经到最后一个了,那就返回最小的那个。但是盯着那个 1,2,3;3,2,1看了两分钟,毫无头绪。搜索到一篇好文章,原来样例数据也很重要哦。把样例数据加长就能发现规律了。下面的内容和原文章基本一样。
例如输入:6 5 4 8 7 5 1,应该返回什么呢?
首先肯定这个排列没有到最大,不是返回最小的排列,因为最起码8没在第一位。
第二,从后面看起。5比1大,如果调换5,1排列数更小,不对。调换7,5也一样。继续看发现到4的位置可以换了。原来4后面的8 7 5 1 是一个递减序列。根据递减序列,找到要替换的元素4。
第三,4应该被5替换,也就是递减序列中,比4大的最小元素。替换之后是 6 5 5 8 7 4 1。
第四,8 7 4 1 按照升序排列。
学习:看完别人的答案,我才知道我对6 5 4 8 7 5 1,应该返回什么,头脑中并没有清晰的概念。只是大概知道怎么做。样例数据延长,有助于发现规律。
代码

79 Word Search

思路:基本思路是回溯法。遍历board,把每个char的位置放入map中。然后从word的第一个字符开始找。递归的退出条件是idx>=word.length。每一步查找的时候都只是查找固定位置相邻的位置上的元素。这里需要注意的是,一个位置的元素被访问过以后就不能再访问了。我使用了双向队列解决这个问题。
学习:直接修改board[i][j]=*,标记已经访问过的元素。速度更快。总结一下:标记数组是否访问过,可以开辟新的空间做标记,可以修改原数组的值标记。修改原数组值可以修改为别的值,或者添加负号。
代码

数字加和问题总结

两数字加和
三数字加和
四数字加和
四数组加和II
数字加和问题有几个细节:1 返回的是数组下标还是数值;2 数组是排序好的吗?3 数组中有重复元素吗?

782. Transform to Chessboard

题意:特点1:NNN∗N的矩阵;特点2:相邻位置是指横轴和纵轴相邻的4个位置;特点3:元素值0的4个邻居都是1,元素值1的4个邻居都是0。
思路:将例题的输入做了以下操作得到有效矩阵
这里写图片描述
如果矩阵中有相邻的两行或者相邻的两列相同就需要交换操作。
接下来思考如何判断矩阵中相邻两行相同。下标从0开始。第1行与第0行比较;第2行与第1行比较。
还要思考如果找到相同的两行,应该换到什么位置。例如第1行和第0行相同=>移动第1行;第1行与第2行不同 =>第1行和与第2行换位置。再次比较新的第2行与第3行是否相同。当找不到替换位置的时候,返回-1。

学习:上面的总结并不彻底。参考网页
一个有效的矩阵的性质有:
1 当第一行输入定了以后,只有两种行数据:0110和1001,不会有形式。其中一种是另外一种的逆。对列也是一样的。由此观察到,矩阵上左、上右、下左、下右四个位置的值可能是4个0,也肯能是2个0和2个1,或者4个1。
2 每一行(列)有一半值是1,一半值是0。如果n=2*k,那么每行(列)有k个0,k个1;如果n=2*k+1,那么每行(列)有k个0,k+1个1或者k个1,k+1个0。

152 Maximum Product Subarray

思路:乘积最大的子数组,立马联想到了和最大的子数组。都用动态规划。这里和与乘积有一个最大的区别是+<负数+正数<正数,而<负数∗正数<负数>负数∗负数>负数。对于本题的状态转移方程就不只是和最大值之间的关系了。
dp[i]=Math.max(Math.max(dp[i-1]*nums[i],dpMin[i-1]*nums[i]),nums[i]);
dp[i-1]存储到i-1下标最大的乘积;dpMin[i-1]存储到i-1下标最小的乘积。
这个题目与 Subarray Sum Equals K 是有区别的。
代码

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

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

相关文章

[Leetcode][第214题][JAVA][最短回文串][KMP][RK]

【问题描述】[中等] 【解答思路】 1. 字符串哈希 复杂度 class Solution {public String shortestPalindrome(String s) {int n s.length();int base 131, mod 1000000007;int left 0, right 0, mul 1;int best -1;for (int i 0; i < n; i) {left (int) (((long)…

坏掉的项链Broken Necklace

题目描述 你有一条由N个红色的&#xff0c;白色的&#xff0c;或蓝色的珠子组成的项链(3<N<350)&#xff0c;珠子是随意安排的。 这里是 n29 的二个例子: 第一和第二个珠子在图片中已经被作记号。 图片 A 中的项链可以用下面的字符串表示&#xff1a; brbrrrbbbrrrrrbrrb…

[Leetcode][第557题][JAVA][反转字符串中的单词 III][遍历][String函数]

【问题描述】[简单] 【解答思路】 1. 遍历 开辟一个新字符串。然后从头到尾遍历原字符串&#xff0c;直到找到空格为止&#xff0c;此时找到了一个单词&#xff0c;并能得到单词的起止位置。随后&#xff0c;根据单词的起止位置&#xff0c;可以将该单词逆序放到新字符串当中…

第七十二期:爬虫爬的好,牢饭吃到饱?

前几天分享的一篇《只因写了一段爬虫&#xff0c;公司200多人被抓!》相信大家看了后都会发问&#xff0c;我只是个写爬虫的&#xff0c;跟我有什么关系?到底什么样的爬虫才不犯法?今天这篇会解答你所有的疑问。 作者&#xff1a;技术领导力 前几天分享的一篇爬虫被抓相信大…

如何在Swift中创建漂亮的iOS图表

通过图形和图表呈现数据是当今移动应用程序最显着的特征之一。iOS图表使应用程序看起来更漂亮&#xff0c;更有吸引力。 在本教程中&#xff0c;我们将向您展示如何使用代码示例在Swift中实现我们的iOS图表。我们将看一下Swift折线图&#xff0c;饼图以及条形图。 您可以找到许…

第七十四期:从bug看11种编程语言演化史,果然如今Python比较流行

在本文中&#xff0c;作者选择了 11 种非常流行的编程语言&#xff08;通过 Stack Overflow 标签出现的频率衡量&#xff09;&#xff0c;希望可以找出这些问题的共性及差异性。 作者&#xff1a;机器之心编译来源&#xff1a;机器之心 自 2008 年创办以来&#xff0c;Stack …

[Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]

【问题描述】[中等] 【解答思路】 当 xx 号房间中有 yy 号房间的钥匙时&#xff0c;我们就可以从 xx 号房间去往 yy 号房间。如果我们将这 nn 个房间看成有向图中的 nn 个节点&#xff0c;那么上述关系就可以看作是图中的 xx 号点到 yy 号点的一条有向边。 这样一来&#xff…

死磕 java同步系列之开篇

简介 同步系列&#xff0c;这是彤哥想了好久的名字&#xff0c;本来是准备写锁相关的内容&#xff0c;但是java中的CountDownLatch、Semaphore、CyclicBarrier这些类又不属于锁&#xff0c;它们和锁又有很多共同点&#xff0c;都是为了协同多线程的执行&#xff0c;都是一种同步…

第七十五期:Java 2019 生态圈使用报告,这结果你赞同吗?

这是国外一机构调查了 7000 名开发者得出来的 Java 2019 年生态圈工具使用报告&#xff0c;主要调查了 Java 版本、开发框架、web 服务器等使用情况。 作者&#xff1a;平头哥来源 这是国外一机构调查了 7000 名开发者得出来的 Java 2019 年生态圈工具使用报告&#xff0c;主…

[Leetcode][第486题][JAVA][预测赢家][动态规划][递归]

【问题描述】[中等] 【解答思路】 1.递归 复杂度 class Solution {public boolean PredictTheWinner(int[] nums) {return total(nums,0,nums.length-1,1) >0;}//turn 标记轮到谁了 正数表示先手 负数表示后手 public int total( int[]nums ,int start,int end,int tur…

linux-2.6.38 input子系统(用输入子系统实现按键操作)

一、设备驱动程序 在上一篇随笔中已经分析&#xff0c;linux输入子系统分为设备驱动层、核心层和事件层。要利用linux内核中自带的输入子系统实现一个某个设备的操作&#xff0c;我们一般只需要完成驱动层的程序即可&#xff0c;核心层和事件层内核已经帮我们做好了。因此这篇随…

LinkedList专题2

203 Remove Linked List Elements 思路&#xff1a;考虑1 &#xff1a; 可能有多个节点符合&#xff1b;考虑2&#xff1a;命中节点是head&#xff1b;考虑3&#xff1a;命中节点是尾节点&#xff1b;考虑4&#xff1a;命中节点是中间的普通节点。 学习1&#xff1a;在linked…

第四十一期:一道经典的MySQL面试题,答案出现三次反转

前几天偶然看到大家在讨论一道面试题&#xff0c;而且答案也不够统一&#xff0c;我感觉蛮有意思&#xff0c;在此就做一个解读&#xff0c;整个过程中确实会有几处反转。 作者&#xff1a;杨建荣的学习笔记来源&#xff1a;今日头条 前几天偶然看到大家在讨论一道面试题&…

java面试题1 牛客:A派生出子类B,B派生出子类C,并且在java源代码中有如下声明:

懵逼树上懵逼果&#xff0c;懵逼树下你和我 第一题 [单选题] A派生出子类B&#xff0c;B派生出子类C&#xff0c;并且在java源代码中有如下声明&#xff1a; 1 2 3 A a0new A(); A a1new B(); A a2new C(); 以哪个说法是正确的 A第1行&#xff0c;第2行和第3行的声明都是正…

[Leetcode][第81题][JAVA][N皇后问题][回溯算法]

【问题描述】[困难] 【解答思路】 1. 主副对角线列 标记 复杂度 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List;public class Solution {private int n;// 记录某一列是否放置了皇后private boolean[] col;// 记…

[Leetcode][第257题][JAVA][二叉树的所有路径][BFS][DFS]

【问题描述】[简单] 【解答思路】 1. DFS 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(N^2) class Solution {public List<String> binaryTreePaths(TreeNode root) {List<String> paths new ArrayList<String>();constructPaths(root, "…

Depth-first Search深度优先搜索专题1

104. Maximum Depth of Binary Tree 思路&#xff1a;顺着树的一个分支一直数层数直到叶子节点。DFS的思路。这个题目可以练习的是递归转迭代。 代码 695. Max Area of Island 思路&#xff1a;遇到点i,j;如果grid[i][j]没有被访问过&#xff0c;并且等于1&#xff0c;那么…

作用域和数组

作用域 就是一对大括号{} 作用域的的特点在作用域内部声明的变量,只能在这个作用域使用 数组 array 一组类型相同的数(值)1.数组一旦定义好长度就不能改变了2.数组访问摸个数据的方式 数组以下标(index)的方式获取数据 数组的声明 定义10个学员的成绩/两只之间以,隔开…

Depth-first Search深度优先搜索专题2

199. Binary Tree Right Side View 思路&#xff1a;想要得到树的每一层最右侧元素值&#xff0c;用BFS最方便。先访问左节点再访问右节点&#xff0c;最后访问的一个值就是留下的值。 想要DFS的思路也可以。只是一定要访问所有节点。 代码 491 Increasing Subsequences …

[Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]

【问题描述】[中等] 【解答思路】 1. 回溯搜索算法 剪枝 &#xff0c;直接来到叶子结点 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(N) import java.util.Arrays;public class Solution {/*** 记录数字是否使用过*/private boolean[] used;/*** 阶乘数组*/priv…