![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Helios丶
Easier said than done!
展开
-
链表题基础技巧ListNode
链表题技巧,反转链表和链表折半中点原创 2023-04-25 23:29:56 · 169 阅读 · 1 评论 -
设计链表(力扣707)
自己设计一个链表,实现简单的增删改查,上代码:class MyLinkedList { public static void main(String[] args) { MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addAtHead(7); myLinkedList.addAtHead(2); myLinkedList.addAtHead(1);原创 2022-03-24 23:48:12 · 74 阅读 · 0 评论 -
消息对话轮次
/** * 客服和顾客对话,比如abab,客服消息为a,顾客消息为b,计算客服和顾客一共对话了几轮 */public class 对话消息轮次 { public static void main(String[] args) { System.out.println(solve("abab")); } public static int solve(String str){ if(str == null || str.length() <=原创 2021-11-06 15:15:18 · 299 阅读 · 0 评论 -
无重复字符的最长子串
//时间复杂度O(n),空间复杂度 O(s.length()) public int lengthOfLongestSubstring(String s) { if(s == null || s.length() == 0){ return 0; } HashSet<Character> set = new HashSet<>(); int rk = -1, ans = 0, n = s.原创 2021-11-06 13:13:14 · 55 阅读 · 0 评论 -
两数之和-二分法
给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。示例 1:输入:numbers = [2,7,11,15], ta原创 2021-10-31 13:52:58 · 291 阅读 · 0 评论 -
移动零-双指针
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。public void moveZeroes(int[] nums) { if(nums==null) { return; } //两个指针i和j int j = 0; for(int i=0;i<nums.length;i+原创 2021-10-31 13:51:12 · 58 阅读 · 0 评论 -
旋转数组。
public static int[] sortedSquares(int[] nums) { int len = nums.length; int[] result = new int[len]; for(int i = 0,j = len - 1,pos = len -1;i <=j;){ if(nums[i] * nums[i] > nums[j] * nums[j]){ res...原创 2021-10-29 23:08:31 · 40 阅读 · 0 评论 -
有序数组的平方
public static int[] sortedSquares(int[] nums) { int len = nums.length; int[] result = new int[len]; for(int i = 0,j = len - 1,pos = len -1;i <=j;){ if(nums[i] * nums[i] > nums[j] * nums[j]){ res...原创 2021-10-29 22:33:52 · 50 阅读 · 0 评论 -
顺时针旋转矩阵
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。数据范围:0 < n < 3000<n<300,矩阵中的值满足 0 \le val \le 10000≤val≤1000要求:空间复杂度O(n^2),时间复杂度 O(n^2)进阶:空间复杂度 O(1),时间复杂度 O(n^2)输入:[[1,2,3],[4,5,6],[7,8,9]],3返回值:[[7,4,1],[8,5,2],[9,6,3]]原创 2021-10-21 21:55:13 · 118 阅读 · 0 评论 -
合并区间(排序)
中等难度题,直接上代码了import java.util.*;/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */public class Solution原创 2021-10-16 17:51:11 · 48 阅读 · 0 评论 -
KMP算法
关于KMP算法,可以先看这篇博客,图文并茂,不过里面的算法不对,不值得借鉴,https://www.cnblogs.com/dusf/p/kmp.html给你一个文本串 T ,一个非空模板串 S ,问 T 在 S 中出现了多少次数据范围:1 \le len(S) \le 500000, 1 \le len(T) \le 10000001≤len(S)≤500000,1≤len(T)≤1000000要求:空间复杂度 O(len(S))O(len(S)),时间复杂度 O(len(S)+len(T))O(l原创 2021-10-14 22:46:29 · 78 阅读 · 0 评论 -
岛屿数量(BFS、DFS)
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。例如:输入[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]对应的输出为3package com.wy.搜索;import java.util.LinkedList;import java.util.Queue;/** * 思原创 2021-10-09 09:01:13 · 267 阅读 · 0 评论 -
数组中的最长连续子序列
描述给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)示例1输入:[100,4,200,1,3,2]返回值:4示例2输入:[1,1,1]返回值:1这道题可以用并查集,但是没必要,这里用先排序,再看arr[i - 1] == arr[i] - 1 ?代码:/** * max increasing subsequence * @param arr int整型一维数组 the array *原创 2021-09-26 23:05:20 · 63 阅读 · 0 评论 -
两个链表生成相加链表
描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入:[9,3,7],[6,3]复制返回值:{1,0,0,0}public class 两个链表生成相加链表 { public class ListNode { int val;原创 2021-09-22 23:38:55 · 52 阅读 · 0 评论 -
单链表排序
描述给定一个无序单链表,实现单链表的排序(按升序排序)。示例1输入:[1,3,2,4,5]复制返回值:{1,2,3,4,5}最简单的方法,遍历链表写到List中,sort,再拼接下面是用归并排序的解法:public class 单链表排序 { public class ListNode { int val; ListNode next = null; public ListNode(int val) {原创 2021-09-21 21:50:19 · 87 阅读 · 0 评论 -
求平方根(二分法)
实现函数 int sqrt(int x).计算并返回x的平方根(向下取整)public int sqrt (int x) { // write code here //我开始的做法,直接遍历// if(x == 0){// return 0;// }// if(x <= 3){// return 1;// }// for(in原创 2021-09-17 21:20:12 · 165 阅读 · 0 评论 -
最长递增子序列(动态规划)
首先可以看看这个链接,讲解的还可以,不多通不过,因为有问题,可以先找它的问题,再看下面的代码public int[] LIS (int[] arr) { // write code here int dp[] = new int[arr.length]; int temp[] = new int[arr.length]; dp[0] = 1; int tempIndex = 0; temp[tempIndex]原创 2021-09-17 00:45:20 · 60 阅读 · 0 评论 -
最长公共子序列
动态规划问题,先画图找到公式:上代码:public String LCS (String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); if(len1 == 0 || len2 == 0){ return "-1"; } // write code here int[][] dp = new int原创 2021-09-08 23:52:32 · 48 阅读 · 0 评论 -
二叉树根节点到叶子节点和为指定值的路径
二叉树根节点到叶子节点和为指定值的路径package com.wy.tree;import com.wy.TreeNode;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * 1.递归,2.回溯,往下减,3.深度优先搜索非递归 */public class 二叉树根节点到叶子节点和为指定值的路径 { //递归解法 public ArrayList<Array原创 2021-09-01 00:47:28 · 146 阅读 · 0 评论 -
运算表达式
给一个运算表达式 “(2*(3-4))*5”,计算结果package com.wy.recursion;import java.util.ArrayDeque;import java.util.Deque;import java.util.HashMap;import java.util.Map;/** * 给一个运算表达式 "(2*(3-4))*5",计算结果 */public class 表达式求值 { //使用map 维护一个运算符优先级 //这里的优先级划分按照原创 2021-08-20 23:45:39 · 113 阅读 · 0 评论 -
最长回文子串
最长回文子串最长回文子串,比较常考的一道算法题,主要用来练习动态规划可以直接复制下面的代码去自己的IDEpackage com.wy.string;/** * 最长回文子串,三种解法 1:动态规划、2:中心扩散、3:Manacher , 参考 https://blog.nowcoder.net/n/99462149a22d479ba9a3d5c8e7fd0247 */public class LongestPalindrome { public static void main(St原创 2021-08-20 00:01:00 · 56 阅读 · 0 评论