![](https://img-blog.csdnimg.cn/2020040213191459.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法编程
该专栏以算法编程为核心,包含以数据结构为基础算法,以追求高效率的解题思路为目标,提升编码能力和思维能力。
夏影孤灯
这个作者很懒,什么都没留下…
展开
-
最大公因数等于 K 的子数组数目求解全过程
最大公因数等于 K 的子数组数目求解全过程原创 2022-10-23 15:45:54 · 737 阅读 · 0 评论 -
两种方法求解:判断出栈合法性
方法一:根据出栈顺序判断 比当前出栈值小的,一定是递减的(必须保证入栈顺序递增) public boolean validateStackSequences(int[] pushed, int[] popped) { if(popped.length == 0) return true; int max = popped[0]; ...原创 2020-04-04 20:35:00 · 1283 阅读 · 0 评论 -
算法编程 括号专题
括号相关编程题原创 2020-05-10 09:36:08 · 119 阅读 · 0 评论 -
三种方法解决链表排序问题
方法一:插入排序class Solution { public ListNode sortList(ListNode head) { ListNode result = new ListNode(0), p = head, pre, q; // 默认 result.next = null; while(p != null){ ...原创 2020-05-08 11:30:56 · 543 阅读 · 0 评论 -
动态规划之五种背包问题
一、有n件物品,每件物品的重量为 weight = {2, 2, 4, 6, 3} 。现有一个容量为 w = 9 的背包,问如何选取物品放入背包,使得背包内物品的总重量最大。1、二维数组解决 0 1 2 3 4 5 6 7 8 9 0 1 0 1 0 0 0 0 0 ...原创 2020-04-23 11:07:38 · 650 阅读 · 0 评论 -
利用 HashMap 解决求和问题
1、和为K的子数组个数给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。 public int subarraySum(int[] nums, int k) { /** 扫描一遍数组, 使用map记录出现同样的和的次数, 对每个i计算累计和sum并判断map内是否有sum-k **/...原创 2020-04-05 09:58:17 · 2013 阅读 · 0 评论 -
五种方法求解:数组中超过一半的数字
方法一:排序,输出中位数;方法二:每次拿掉两个不同的元素,最后剩余就是;方法三:用栈,栈为空或栈顶元素和当前元素相同入栈,不同则出栈,并删除两元素,栈中剩余即为所求;class Solution { public int majorityElement(int[] nums) { Stack<Integer> stack = new Stack&...原创 2020-04-04 22:31:21 · 587 阅读 · 0 评论 -
四种方法求解:数组中的第K个最大元素
方法一:快排,输入倒数第k个元素;方法二:维护一个K大小的大根堆;public class Main { public static void main(String[] args) { int[] arr = {16, 7, 3, 20, 17, 8}; int[] heap = new int[3]; for...原创 2020-04-04 21:20:38 · 231 阅读 · 0 评论 -
两种方法求解:约瑟夫环
题目描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。解法一:基于数组实现public void Solution(int totalNum, int countNum) { int size = totalNum, c...原创 2020-04-04 17:47:38 · 141 阅读 · 0 评论 -
字符串之大树相乘(leetcode 43)
public String multiply(String num1, String num2) { char[] char1 = num1.toCharArray(); char[] char2 = num2.toCharArray(); int[] result = new int[char1.length + char2.leng...原创 2020-04-04 15:46:05 · 301 阅读 · 0 评论 -
两种方法求解:只出现一次的数字(leetcode 136)
方法一:桶排序方法二:异或运算 两数异或,相同为 0,不同为 1。publicintsingleNumber(int[]nums){for(inti=1;i<nums.length;i++)nums[i]^=nums[i-1];returnnums[nums.length-...原创 2020-04-04 15:04:59 · 157 阅读 · 1 评论 -
页面置换算法之LRU-缓存淘汰算法
LRU,最近最少使用算法,即当要对数据进行淘汰时,将最近最久未使用的数据淘汰,是一种缓存淘汰算法。解题思路如下:1)插入的结点不在内存中,缓存未满,则将此结点直接插入到链表的头部;2)插入的结点不在内存中,缓存已满,则链表尾结点删除,将新的数据结点插入链表的头部;3)插入的结点在内存中,将该结点删除,并放置于链表的头部。class LinkNode{ int value;...原创 2020-02-03 19:10:24 · 571 阅读 · 0 评论 -
买卖股票的最佳时机---状态转移解决所有
目录leetcode 121.买卖股票的最佳时机I(一笔一次买卖)leetcode122.买卖股票的最佳时机 II(一笔多次买卖)leetcode123.买卖股票的最佳时机 III (一笔多次买卖)leetcode 188.买卖股票的最佳时机 IVleetcode 714.买卖股票的最佳时机含手续费leetcode 121.买卖股票的最佳时机I(一笔一次...翻译 2020-04-02 11:15:55 · 283 阅读 · 0 评论