数据结构与算法
记录学习数据结构与算法的过程!
码里安乐窝
Java程序员
展开
-
438. 找到字符串中所有字母异位词
题目描述给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。解题思路:本题是典型的窗口滑动+左右索引指针的算法一开始还是先将字符串转换为字符数组,定义一个ans来接收结果这里使用了两个数组needs和window来分别记录需要得到的元素和滑动窗口遍历到的元素首先把目标数组ar原创 2020-07-28 00:34:37 · 208 阅读 · 0 评论 -
剑指offer48:无重复字符的最长子串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。双指针法public class Solution { public static int lengthOfLongestSubstring(String s) { int n = s.length(); Set<Character> set = new HashSet<>(); int result = 0, i = 0, j = 0; while (i < n原创 2020-07-28 00:07:40 · 127 阅读 · 0 评论 -
第239题:滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sliding-window-maximum1.暴力搜索class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int len .原创 2020-07-27 22:02:25 · 123 阅读 · 0 评论 -
二分查找变形之搜索旋转排序数组
题目:LeetCode(33)设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,原创 2020-06-25 21:24:34 · 190 阅读 · 0 评论 -
动态规划之找零钱问题
题目:分析:如果用贪心法,求出的未必是最优解了,例如:【1,1,3,,4】【1,1,4,】与【3,3】,显然不对。我们应该用动态规划的方法区求解。钞票面值为【1,2,5】 金额为11dp[i],代表金额i的最优解(即是最小的使用张数)数组dp[]中存储金额1至11的最优解(最少使用钞票的数量)在计算dp[i]的时候,dp[0]、dp[1]、dp[i-1]都是已知的金额 i 可由下面归纳得出:i-1 与coins[0]组成i-2 与coins[1]组成i-3 与coins[2]组原创 2020-06-25 17:15:28 · 316 阅读 · 0 评论 -
二叉堆的上浮与下沉
上浮:public class HeapSort { /** * 下沉操作,执行删除操作相当于把最后 * * 一个元素赋给根元素之后,然后对根元素执行下沉操作 * @param arr * @param parent 要下沉元素的下标 * @param length 数组长度 */ public static int[] downAdjust(int[] arr, int parent, int length) { //临时保证原创 2020-06-24 22:24:36 · 730 阅读 · 0 评论 -
leetcode-349:两个数组的交集
题目:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。代码:import java.util.*;cl...原创 2020-03-19 12:40:27 · 96 阅读 · 0 评论 -
leetcode-804:唯一摩尔斯密码词
唯一摩尔斯密码词题目简介:国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-”, “b” 对应 “-…”, “c” 对应 “-.-.”, 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-…","-.-.","-…",".","…-.","–.","…","…",".—","-.-","....原创 2020-03-19 09:43:24 · 171 阅读 · 0 评论 -
leetcode-203:删除链表重复元素
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode removeEleme...原创 2020-03-18 09:40:31 · 101 阅读 · 0 评论 -
冒泡排序以及其它算法实现(Java)
冒泡排序:import java.util.Arrays;public class BubbleSort { public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int e = arr.length - 1; e > 0;...原创 2020-03-16 19:42:46 · 105 阅读 · 0 评论 -
链表的类型
1.单链表所谓的单链表就是链表最基本的结构,链表通过指针将一组零散的内存块串联在一起,其中,我们把内存块称为链表的“节点”。为了所有的节点能串起来,每个链表的节点除了存储数据之外,还需要激励链表上的下一个节点的地址,如图所示,我们把这个记录下个节点的地址的指针叫做后继指针next,如果链表中某个节点为p,p的下一个节点为q,我们可以描述为:p->next=q下面的图更加详细的描述了单链表...原创 2020-03-14 18:22:46 · 3399 阅读 · 1 评论 -
数据结构与算法初识
1.为什么要学习数据结构与算法?数据结构与算法是一门内功,就像去少林寺学习功夫一样,刚开始从挑水、种菜为主,经过一段时间之后,才会学到真正的功夫(有了几年的基础),学习算法也是这样,学习算法是很枯燥无味的,学会了,你就是大佬了。2.什么是算法?算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是...原创 2020-03-11 00:40:37 · 109 阅读 · 0 评论 -
LeetCode01-两数之和
官网题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来...原创 2020-01-16 17:46:47 · 195 阅读 · 0 评论