Algorithms
CaspianSea
这个作者很懒,什么都没留下…
展开
-
力扣 1584. 连接所有点的最小费用
最小生成树原创 2023-01-27 11:46:12 · 180 阅读 · 0 评论 -
LeetCode: 最小体力消耗路径
优先级队列原创 2023-01-24 15:43:45 · 186 阅读 · 0 评论 -
Hanoi Tower问题的中间状态
Hanoi Tower问题原创 2022-08-06 18:24:01 · 138 阅读 · 0 评论 -
有序双向链表的实现。
双向链表原创 2022-07-24 17:24:20 · 431 阅读 · 0 评论 -
支持删除,更新任意结点的优先级队列
优先级队列原创 2022-06-26 16:10:41 · 191 阅读 · 0 评论 -
小写字母构成的字符串的哈希
字符串哈希原创 2022-06-18 16:44:14 · 298 阅读 · 0 评论 -
删除优先级队列的第k个元素
假定是最小堆。伪代码: 1, Delete a node from the array (this creates a "hole" and the tree is no longer "complete") 2. Replace the deletion node with the "fartest right node" on the lowest level of the Binary Tree (This step转载 2022-04-23 22:08:49 · 283 阅读 · 0 评论 -
DJB Hash
unsigned long long hash( char *str){ unsigned long long hash = 5832; char c; while( (c = *str++) != '\0') { hash = (hash << 5) + hash + c; } return hash;}原创 2022-02-12 14:18:55 · 645 阅读 · 0 评论 -
Leetcode 49. Group Anagrams
#include <stdlib.h>#include <stdio.h>#include <string.h>/*Entry represents a word. The key is string you get after re-arranging the word charachters in ascending order. Value represents the word itself.*/typedef struct { ch...转载 2021-05-30 10:14:37 · 176 阅读 · 0 评论 -
Heap sort
void maximizeHeap( int *nums, int idx, int size){ int v = nums[idx]; while( 2 * idx + 1 < size) { int a = 2 * idx +1; int b = 2 * idx +2; if( b < size && nums[b] >nums[a]) { a = .原创 2021-05-23 22:44:37 · 93 阅读 · 0 评论 -
Leetcode: 373. Find K Pairs with Smallest Sums
写的有问题的代码:/** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). */ struct pair {原创 2021-05-11 08:04:11 · 122 阅读 · 0 评论 -
自己给自己挖坑写了快排代码,查了半天才找出错误..
//////////////// sorting ///////////////////////////void insertion_sort(long long *nums, int size){ int i, j; for(i = 0; i < size -1; ++i) { j = i; long long tmp = nums[j+1]; while( j >= 0 && tmp < num...原创 2021-03-12 12:09:48 · 116 阅读 · 0 评论 -
树状数组(Binary Indexed Tree/Fenwick Tree)笔记
假定原始数组为x[i], 树状数组为BIT[i].1. 求任意前缀和,单点更新的时间复杂度为O(lgn) (n为数组大小)2. 树状数组第i个元素BIT[i]保存了2^L 个数组x元素的和.L为 i的二进制表达式里最末位1的位置(从0开始,从右边数,). 如果 i 的...原创 2021-03-06 18:22:40 · 177 阅读 · 0 评论 -
LeetCode:787. Cheapest Flights Within K Stops
There are n cities connected by m flights. Each flight starts from city u and arrives at v with a price w.Now given all the cities and flights, together with starting city src and the destination dst, your task is to find the cheapest price from src to d原创 2021-02-19 09:37:06 · 160 阅读 · 0 评论 -
78. Subsets
Given a set of distinct integers, nums, return all possible subsets (the power set).Note: The solution set must not contain duplicate subsets.Example:Input: nums = [1,2,3]Output:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]...原创 2020-10-02 22:50:03 · 128 阅读 · 0 评论 -
211. Design Add and Search Words Data Structure
You should design a data structure that supports adding new words and finding if a string matches any previously added string.Implement the WordDictionary class: WordDictionary() Initializes the object. void addWord(word) adds word to the data s...原创 2020-08-22 00:54:48 · 318 阅读 · 0 评论 -
LeetCode令人费解的报错
208. Implement Trie (Prefix Tree)Implement a trie with insert, search, and startsWith methods.Example:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // returns truetrie.search("app"); // returns falsetrie.startsWith("app...原创 2020-08-21 08:58:48 · 309 阅读 · 0 评论 -
Leetcode: 104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。1. DFS 递归:int maxDepth(struct TreeNode* root){ if(!root) { return 0; } ...原创 2020-07-10 00:02:13 · 136 阅读 · 0 评论 -
返回比当前数字大的最小的素数
int getNextPrime(int a){ if( a == 1 || a == 2 || a == 3) { return a; } for(;;) { int i; for(i = 2; i *i <=a; ++i) { if (a%i == 0) { i = 2; ++a;...原创 2020-06-29 11:26:20 · 610 阅读 · 0 评论 -
98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。1:使用中序遍历,然后用一个全局变量记住前一个值,用当前的值和前一个值比较:long long last;bool isValidBST_r(struct TreeNode* root);bool isValidBST(struct TreeNode* ro...原创 2020-06-26 09:34:01 · 241 阅读 · 0 评论 -
Leet code 704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示: ...原创 2020-06-04 09:10:50 · 205 阅读 · 0 评论 -
二分法中间值的选择
1)mid 向下取整while( left < right){ int mid = (right - left)/2 + left; if( check(mid) ) { left = mid + 1; } else { right = mid; }}会把 [left, right]分成 [mid +1, right], [left, mid]两个区间。如果 [left,right]只有两个元素,原创 2020-05-27 22:29:30 · 1747 阅读 · 0 评论 -
查找山脉数组的最大值
何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:首先,A.length >= 3其次,在 0 < i < A.length - 1 条件下,存在 i 使得: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ... > A[A.length - 1]方法1: 取中点mid和右边半部分的中点mid1, 如果 mid位置的值大于mid1处的值,mid一定位于最大值的...原创 2020-05-25 23:09:51 · 378 阅读 · 0 评论 -
LeetCode: 153. 寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0这道寻找最小值的题目可以用二分查找法来解决,时间...转载 2020-05-03 16:57:53 · 281 阅读 · 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]...原创 2020-04-29 00:16:57 · 178 阅读 · 0 评论 -
leetcode 35 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0...原创 2020-04-25 00:46:57 · 174 阅读 · 0 评论 -
POJ 2456 Aggressive cows
DescriptionFarmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000).His C...原创 2020-04-24 00:10:21 · 174 阅读 · 0 评论 -
牛顿法求平方根
对于给定的输入N,求平方根的公式是 x(k+1) = (xk + N/xk)/2;需要设置一个 N的平方根的初始估计值。取N的值就可以。#include <stdio.h>double newton(double d){ if( d < 0) { return -1; } ...原创 2020-03-09 11:11:16 · 462 阅读 · 0 评论 -
二分查找算法细节详解
思路我相信对很多读者朋友来说,编写二分查找的算法代码属于玄学编程,虽然看起来很简单,就是会出错,要么会漏个等号,要么少加个 1。不要气馁,因为二分查找其实并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的:Although the basic idea of binary search is comparatively straightforward,the det...转载 2020-02-12 01:08:27 · 592 阅读 · 2 评论 -
LeetCode 4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).You may assume nums1 and n...转载 2020-01-29 16:53:03 · 467 阅读 · 0 评论 -
LeetCode 28. Implement strStr()
mplement strStr().Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.Example 1:Input: haystack = "hello", needle = "ll"Output: 2Example ...原创 2019-12-14 20:30:56 · 150 阅读 · 0 评论 -
KMP算法
KMP算法是在字符串匹配的过程中利用字符串的相同前后缀信息,跳过不必要的比较,从而提高效率。核心是根据模式串构造一个数组,数组的第 i个元素表示长度为i的子串里面相当前后缀的长度。在上图中,输入字符串(模式串)为"ABABACA";数组的第0个元素为0,第一个也为0;第三个元素值为1,表示长度为3的子串"ABA"相同前后缀"A"的长度为1.假定主串为"bacbababaabcbab...原创 2019-12-11 00:57:17 · 222 阅读 · 0 评论 -
快速排序的实现
是根据 “数据结构和算法分析”里面的素原创 2014-04-16 08:27:54 · 792 阅读 · 0 评论 -
KMP算法
经过几天的学习,终于理解了 KMP算法的基本原理。原创 2014-05-03 13:22:28 · 919 阅读 · 0 评论 -
DFS (Recursive, link list)
1)非递归 DFS的算法 for all vertices in the graph do原创 2014-05-17 05:02:04 · 871 阅读 · 0 评论 -
两个算法小程序
基本上都是使用迭代算法的。1) 打印一个集合的数据哦有的子集。原创 2014-05-19 08:55:43 · 1121 阅读 · 0 评论 -
BFS 算法求解最短路径
是根据 >里的相关算法实现的。原创 2014-06-05 02:06:13 · 10351 阅读 · 0 评论 -
二叉树的基本算法实现
根据“算法导论12章的内容。原创 2014-07-17 00:10:51 · 965 阅读 · 0 评论 -
求每个元素之和为最大的给定数组的子数组
给定的数组,元素可能为正或者为负方法 1. broute-force这个是最容易想到的方法,就是把每个可能的子数组列出来,计算出元素之和,然后把最大的挑出来。显然,这个算法的时间复杂度为 O(n^2)struct tuple FindMaxSubArray(int *array, int size){ struct tuple t; t.sum = INT_MIN;原创 2015-03-01 00:16:46 · 737 阅读 · 0 评论 -
背包问题(Knapsack problem)
这是一类经典的算法问题。问题可以描述为: 给定一组物品 x(1, n), 每个具有重量 w(1, n) 和价值 v(1, n), 如何从这组物品里选择一个子集合,使得这个子集合的元素在满足总重量 w 小于或等于给定的重量W的条件下,总价值 V 最大。通用的算法是使用递归来求解。V(i, w) = max(V(i -1, w), V(i -1, w- w(i))+v(i))其中, V原创 2015-03-27 08:03:43 · 2994 阅读 · 0 评论