算法设计
包括C语言、java、JavaScript等写的算法题,还附带了一些面试的算法题。
松果Tech
松松笔记经验
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法:时间复杂度计算
常见的时间复杂度量级有:常数阶O(1)对数阶O(logN)线性阶O(n)线性对数阶O(nlogN)平方阶O(n²)立方阶O(n³)K次方阶O(n^k)指数阶(2^n)如何计算时间复杂度T(n) = O(n)T(n)表示最细的代码块数与n的关系的函数,忽略细节抓住主要因素常数阶O(1)int i = 1;int j = 2;++i;j++;int m = i + j;线性阶O(n)for(i=1; i<=n; ++i){ j = i; j++;}原创 2021-07-15 14:30:12 · 225 阅读 · 0 评论 -
java算法:4. 寻找两个正序数组的中位数(困难)
题目:寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。详见:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/思路:本题的思路有两种,力扣上的官方也有所解读,但是我理解的是将这两种思路合并成为一种: 假设我们已经把两个数组合并了,中位数的索引位置得到的是k,相当于在这个数组中有k个元素比中位数小,而这个k值我们又很好求原创 2021-04-20 20:34:49 · 270 阅读 · 0 评论 -
java算法:2. 两数相加
题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路这题是一道链表题,虽然是两个数相加,其实转换一下就是两个链原创 2021-04-19 11:21:50 · 692 阅读 · 0 评论 -
java算法:27. 移除元素
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路这是一道简单题,可以直接用蛮力法删原创 2021-04-19 10:05:19 · 211 阅读 · 0 评论 -
java算法:783. 二叉搜索树节点最小距离
题目:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。详见:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/思路:中序排列这道题的思路很简单,我们可以直接中序遍历,然后用ArrayList数组存储起来,再对数组求得最小差值。当然,这道题有个隐藏条件可以不用这么麻烦:我们要知道二叉搜索树的特点:二叉搜索树中序遍历得到的值序列是递增有序的。这个这个就明确多了,我们可以在遍历的过原创 2021-04-13 21:00:08 · 181 阅读 · 0 评论 -
java算法:179. 最大数
题目:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/largest-number/solution/zui-da-shu-by-leetcode-solution-sid5/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。思路:原创 2021-04-13 20:11:28 · 457 阅读 · 0 评论 -
java算法:154. 寻找旋转排序数组中的最小值 II
题目已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 4 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。给你一个元素值 互不相同 的数组 nu原创 2021-04-08 09:38:12 · 213 阅读 · 0 评论 -
java算法:81. 搜索旋转排序数组 II
题目已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4] 。原创 2021-04-07 20:15:31 · 223 阅读 · 3 评论 -
java算法:80. 删除有序数组中的重复项 II
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路定义两个指针:k和ii 用来遍原创 2021-04-07 11:36:37 · 291 阅读 · 0 评论 -
算法思想:数据结构基础
文章目录1.什么是数据结构和算法数据结构:算法:2.线性结构数组:链表:3.树相关术语树的结构体树的查找4.图图的遍历1.什么是数据结构和算法数据结构:可以容纳数据的结构,计算机分为存储和运算是程序的两大功能,数据结构是专门研究数据存储的学科,是静态的。算法:对数据结构进行处理的方法,研究运算过程的学科,是动态的。2.线性结构一系列的元素组成的有序的集合数组:特征:1、数组占用的存储空间是连续的;2、数组的元素数量是固定的,创建是必须指定长度;3、每个元素占用的内存类型是一样的,内存原创 2021-04-23 11:11:50 · 516 阅读 · 0 评论 -
java算法&算法思想:10. 正则表达式匹配(动态规划详解)
题目:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/regular-expression-matching著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:动态规划代码:import java原创 2021-04-23 10:22:09 · 496 阅读 · 0 评论 -
java算法:对文章中的单词进行缩写
题目单词缩写,举个例子:International Collegiate Programming Contest改写为ICPC (International Collegiate Programming Contest)。答案import java.util.ArrayList;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner i原创 2021-04-05 20:11:05 · 293 阅读 · 0 评论 -
java算法:整数反转
题目将一个整数x反转为y例如:x=1234y=4321答案 private static int reverse(int x) { int y=x; //要反转的整数 long re=0L;//交换变量,0L表示long型的0值 while(true){ if(y == 0){ break; } re = y % 10 + re * 10;原创 2021-04-05 20:03:03 · 191 阅读 · 0 评论 -
java算法:辗转相除法求最大公约数
题目顾名思义,直接写答案答案 private static int gcd(int a, int b) { int num = a%b; if (num==0){ return b; } return gcd(b,num); }原创 2021-04-05 11:05:21 · 289 阅读 · 0 评论 -
js算法:对一个数组进行乱序排序,要求每个元素不会落到原来的位置,且落到其他位置的概率相同
题目:对一个数组进行乱序排序,要求每个元素不会落到原来的位置,且落到其他位置的概率相同 const arr = [1,2,3,4,5,6,7,8,9];思路:假如这个数组的长度是10,那就遍历每一个元素,生成一个0-9的随机数,判断这个随机数是不是现在这个索引,如果是就再随机一次直到不是现在这个索引。得到这个随机数后与随机数位置的数组位置交换,就这样遍历数组一次就打乱了。但是这种思路还是有在原来位置的可能:之前可能在同一位置的是因为随机后索引的位置再交换可能会回到原来索引的位置,如第0个元素随机原创 2021-04-05 10:32:06 · 781 阅读 · 0 评论 -
js算法:如何找到js数组中出现频率最高的元素
题目:如何找到js数组中出现频率最高的元素,数组里面含有对象。const obj1 = {};const obj2 = {};const obj3 = {};const arr = [obj1, obj2, obj3, obj2, obj3, obj2, obj2];思路:数组去重:先数组去重:[obj1,obj2,obj3],去重方法可以用es6去重;遍历分列:遍历去重数组,去统计原数组出现相同的元素filter并进行分类到一个新数组中去。封装数据结构:再遍历一次,封装成想要的数据结原创 2021-04-05 10:18:19 · 1432 阅读 · 1 评论
分享