算法
芝麻仗剑走天涯
头铁就完事了
展开
-
LRUCache-Java实现
package com.test;/** * @author yourname * Created on */public class LRUCache { // 相当于自己定义一个带时间限制的treeMap 比较大小通过最后一次访问时间来判断 // map的底层显然是用链表实现的 /* 1.put操作 遍历队列,看看是否已经存在这个key 如果已经存在,则找到位置并更新value,然后将该结点移至原创 2021-09-09 15:35:44 · 287 阅读 · 0 评论 -
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。(Java)
leetcode 680思路判断回文串显然是用双指针的,i从前往后遍历,j从后往前遍历。难点就是怎么去判断删除一个元素后的字符串是不是回文串,我提供一个思路:以"abdda"这个串为例,此时i指向’b’,j指向’d’,发现不对了。但是有一次删除的机会,我们自己写几个case其实就能发现,此时子串范围为(i+1, j)或(i, j-1)的俩子串只要有任意一个是回文串,则结果就是回文串,否则就不是。package t2;public class 验证回文字符串2 { public原创 2021-06-30 15:44:47 · 1224 阅读 · 0 评论 -
判断二叉树是否是完全的BST(java)
import java.util.ArrayList;public class 判断二叉树是否是完全的BST { private int preValue = Integer.MIN_VALUE; public TreeNode create(){ TreeNode t1 = new TreeNode(1,null,null); TreeNode t2 = new TreeNode(9,null,null); TreeNode t3 =.原创 2021-05-31 15:52:39 · 149 阅读 · 0 评论 -
回溯问题-java
1.全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案import java.util.ArrayList;import java.util.List;public class Solution {public void persum(int []nums){ //数组长度 int len=nums.length; //用一个boolean数组判断位置是否可用 boolean user[]=n原创 2021-05-19 16:05:06 · 235 阅读 · 2 评论 -
删除排序链表中的重复元素 II-(java)
leetcode82存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。public class test { public ListNode deleteDuplicates(ListNode head) { if(head==null || head.next==null) return head;原创 2021-05-11 22:48:09 · 137 阅读 · 0 评论 -
最小覆盖字串
package test;public class 最小覆盖子串 { public static String minWindow(String s, String t) { if (s == null || s == "" || t == null || t == "" || s.length() < t.length()) { return ""; } //用来统计t中每个字符出现次数 int[]原创 2021-04-30 10:27:50 · 112 阅读 · 0 评论 -
实现两数之和(Java)
一组解和多种解时间复杂度为O(n)import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class 两数之和 { //找一组解 public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> hashtable = new HashMap<Integer, Integer原创 2021-04-30 10:19:06 · 274 阅读 · 0 评论 -
二叉树的创建以及遍历
import java.util.*; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val){ this.val=val; } public TreeNode(int val,TreeNode left,TreeNode right){ this.val=val; this.left=left; .原创 2021-04-17 16:45:58 · 104 阅读 · 0 评论 -
二叉树的创建(Java)
package test.Tree;import java.util.LinkedList;import java.util.List;//把一个数组的值存入二叉树中,然后进行3种方式的遍历public class Tree_int { private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; private static List<Node> nodeList = null; //内部类结点 privat原创 2021-04-17 16:16:33 · 249 阅读 · 0 评论 -
二叉树的创建【字符】(java)
package test.Tree;import java.util.LinkedList;import java.util.Queue; class Node<T> { T val; Node left; Node right; public Node() { } public Node(T val) { this.val = val; } public Node(T val, Node left,原创 2021-04-17 10:42:01 · 234 阅读 · 0 评论 -
最长公共子序列(java)
输入“hello” ,“heeo”输出heo public static void main(String[] args){ //两个测试串 String s1 = "hello"; String s2 = "hleeo"; System.out.println(maxPubLength(s1, s2)); } public static int maxPubLength(String s1,String s2原创 2021-04-13 20:54:19 · 570 阅读 · 0 评论 -
反转链表(Java)
package test;class Node{ int data; Node next; public Node (){ } public Node(int data) { this.data = data; } public Node(int data,Node next){ this.data = data; this.next = next;}}public class 反转链原创 2021-04-12 21:21:12 · 116 阅读 · 0 评论 -
最长公共字串(JAVA实现)
最长公共字串给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。输入“1AB2345CD”,“12345EF”输出“2345”public String LCS (String str1, String str2) { int m = str1.length(), n = str2.length(); int[][] dp = new int[m + 1][n + 1]; in原创 2021-04-12 10:14:17 · 1509 阅读 · 0 评论 -
集合划分
1.问题描述:n个元素的集合{1,2,.,n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15个不同的非空子集如下:{1},{2},{3},{4}}, {{1,2},{3},{4}},{{1,3},{2},{4}}, {{1,4},{2},{3}},{{2,3},{1},{4}}, {{2,4},{1},{3}},{{3,4},{1},{2}}, {{1,2},{3,4}},{{1,3},{2,4}}, {{1,4},{2,3}},{{1,2,3},{4}}原创 2020-11-29 17:46:49 · 2983 阅读 · 0 评论 -
链表逆置-头插法创建
#include <stdio.h>#include <stdlib.h>struct ListNode { int data; struct ListNode *next;}ds;struct ListNode *createlist();int main(){ struct ListNode *p, *head = NULL; head = createlist(); for ( p = head; p != NULL; p原创 2020-11-28 09:13:54 · 102 阅读 · 0 评论 -
数组逆置问题
数组逆置问题问题描述设a[0:n-1]是有n个元素的数组,k(0=<k=<n-1)是一个非负整数。试设计一个算法将子数组 a[0:k-1]与a[k:n-1]换位。要求算法在最坏情况下耗时O(n),且只用到O(1)的辅助空间。#include <stdio.h>void swap(int a[],int low,int high);void swap(int a[],int low,int high){ int i,j; for(i=low,j=high;i<j;原创 2020-11-27 15:45:32 · 1063 阅读 · 0 评论 -
动态规划求最大路径-三角形最大路径和矩阵最大路径
1.数字三角形求最大路径问题:给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。73 88 1 02 7 4 44 5 2 6 5对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。数据输入:由文件input.txt提供输入数据。文件的第1行是数字三角形的行数n,1<n<100。接下来n行是数字三角形各行中的数字。所有数字在原创 2020-11-27 10:00:53 · 1655 阅读 · 0 评论 -
创建一个无重复值的单链表
项目1删除链表中的重复值,首先的要有一个岗哨,及第一次循环最起始的阶段的值作比较,删除一个元素要有一个前驱,一个后继,所以得必须有两个指针同时遍历,外加一个岗哨做判断,一共三个指针。#include <stdio.h>#include <stdlib.h>typedef struct note{ int data; struct note *next;}elemsn;elemsn *create(int b[],int n);void print(elemsn *.原创 2020-11-24 10:07:08 · 608 阅读 · 0 评论 -
数组前后交换
数组前后交换项目1假设数组a有n个元素,k(0<=k<=n-1),是一个非负整数。设计一个算法将子数组a[0:k-1]与a[k:n-1]换位。要求最坏情况下时间复杂度为O(n),空间复杂度为O(1)详解:很显然这个要在时间复杂度为O(n),空间复杂度为O(1)的情况下不能开辟新的数组且只能用一层循环这时候,这个时候,我们可以借用一个函数,交换数组内的元素,这样就可以解决问题了。#include <stdio.h>void swap(int a[],int n,int原创 2020-11-24 09:00:40 · 1911 阅读 · 0 评论 -
分治和减治算法——归并排序
贪心:每步最优解回溯(试探):得到所有解分治(二分法):将大问题划分成小问题来解决减治(递归):不断的缩小问题规模得到解动态规划:整体最优解1.分支算法分:划分子问题(将一个问题划分成若干个独立的,具有共性的问题)治:求解每个子问题(递归过程),由词构建整个问题的解步骤:分解子问题每个子问题与原问题相似子问题规模太小(什么时候知道规模较小?【有解】)合并:将每个子问题的解合并成原问题的解适用场景在一个较小的规模上得到解该问题具有最优子结构每个子问题的解合成原创 2020-11-08 23:49:21 · 253 阅读 · 0 评论 -
回溯算法之马踏棋盘
马踏棋盘问题描述:将马放到国际象棋的88棋盘上的任意指定方格中,按照马的走棋规则将“马”进行移动,要求每个方格进入且只进入一次,走遍棋盘上的64个方格,将数字1,2,3…,64依次填入一个88的方阵。递归我在这里用了一个10*10的表格而不是8*8的表格。为什么这样用呢?我主要考虑到了边界问题,马一共有8中踏出方式,可是到了边界时 #include <stdio.h>#include<stdlib.h>// 棋盘 int chess[12][1原创 2020-11-08 22:49:12 · 211 阅读 · 0 评论 -
回溯算法 - 八皇后问题找所有解递归和非递归
八皇后问题描述1.什么是八皇后问题在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。即在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上 解析算法: 1.首先我们并不需要一开始就接设计8*8的二维数组(这个二维数原创 2020-10-25 20:36:31 · 447 阅读 · 0 评论