刷题套路
刷题套路分类
fengzhengwszz
这个作者很懒,什么都没留下…
展开
-
leetcode 25 K个一组反转链表
最近又把力扣翻出来做,然后这道题又有了新思路,大概就是先全部反转并且计算链表的长度,然后用长度对K取余数,余数的值一个个放到新链表的末尾,其他的分K组放。比如1,2,3,4,5 的链表 K=3整个链表反转后就是5,4,3,2,1余数为2 ,就先拿5 再拿4放到表头 现在新链表就为4,5然后数K个拿到表头,新链表为 3 2 1 4 5 public ListNode reverseKGroup(ListNode head, int k) { //新思路,先全部反转并统计链表原创 2022-03-01 20:11:23 · 212 阅读 · 0 评论 -
240搜索二维矩阵2
1、二分查找,每行二分// public boolean searchMatrix(int[][] matrix, int target) { // //每层二分 // if (matrix == null || matrix.length == 0) return false; // for (int i = 0; i < matrix.length; i++) { // //每层二分 // in原创 2021-08-26 16:21:43 · 148 阅读 · 0 评论 -
leetcode870 田忌赛马
public int[] advantageCount(int[] nums1, int[] nums2) {//田忌赛马:每次在A中寻找大于bi的最小值,如果没有,则返回A中最小值 if (nums1 == null || nums1.length == 0) return null; int[] res = new int[nums1.length];// 如果A最小的马<=B最小的马 则让A最小的马和B最大的马对// 如...原创 2021-08-17 17:27:00 · 250 阅读 · 0 评论 -
最大正方形 leetcode221
class Solution { public int maximalSquare(char[][] matrix) { //动态规划:dp[i][j]表示:以i,j为右下角的正方向的边长 int[][] dp = new int[matrix.length][matrix[0].length]; int res = 0; for (int i = 0; i < matrix.length; i++) { f原创 2021-08-11 11:46:57 · 87 阅读 · 0 评论 -
leetcode 5 最长回文子串
public String longestPalindrome(String s) { //动态规划,先构建dp数组,同时记录最大值和位置 if (s == null || s.length() <= 1)return s; int len = s.length(); boolean[][] dp = new boolean[len][len]; for (int i = 0; i < len; i++) { ...原创 2021-08-10 21:38:19 · 43 阅读 · 0 评论 -
初识记忆化 ---- 329. 矩阵中的最长递增路径
矩阵中的最长递增路径 //记忆化+深搜 public int longestIncreasingPath(int[][] matrix) {//dfs if (matrix == null || matrix.length == 0){ return 0; } visited = new boolean[matrix.length][matrix[0].length]; memo = new int[m.原创 2021-08-10 14:26:45 · 51 阅读 · 0 评论 -
力扣---关于位运算
面试题 01.01. 判定字符是否唯一public boolean isUnique(String astr) { //不适用额外的数据结构的时候,可以考虑位运算 int x = 0;//表示26位数组的0101实现 int len = astr.length(); for (int i = 0; i < len; i++) { char c = astr.charAt(i); //如果这一原创 2021-08-06 09:18:36 · 133 阅读 · 0 评论 -
力扣刷题----跳跃游戏
跳跃游戏1//1、暴力dp:理所当然,分数不高 public boolean canJump(int[] nums) { //暴力dp boolean[] dp = new boolean[nums.length]; dp[0] = true; for (int i = 0; i < nums.length; i++) { if (!dp[i]) return false; fo原创 2021-08-05 19:29:31 · 91 阅读 · 0 评论 -
最xxx序列
最长上升子序列//1、dp public int lengthOfLIS(int[] nums) { if(nums.length <= 1) return 1; //1、dp int[] dp = new int[nums.length]; dp[0] = 1; int res = 0; for (int i = 1; i < nums.length; i++) {原创 2021-08-05 12:37:25 · 51 阅读 · 0 评论 -
某多多笔试 07.25
假设a区间[0,1],b区间[0,2],则b区间可以完全覆盖a区间,给你任意多的区间,判断是否存在任意两个区间是可以完全覆盖的(存在覆盖即可)输出true ,false41 104 157 95 18//自己的例子public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nex原创 2021-07-26 20:23:57 · 96 阅读 · 0 评论