算法刷题1

1.插入排序

先用一个temp保存当前待插入的元素,然后用一个while循环移动p,循环条件中要判断p>=0,如果待插入的元素小于有序区的所有元素,p会移动的负数,让它0时再循环一次,出来的时候即可插入到对应的位置。

2.选择排序

3.堆排序

如果写实际下标那么就用i2+1<=length判断,判断是否还有右兄弟时:child+1<=length。传进去的参数需要swap后,要i-1。

如果写的不是实际下标,就用i2+1<length判断,判断是否是还有右兄弟时:child+1<length。

4.归并排序

5.lc3.最长无重复字符子串

pre始终记录当前重复的前一个重复字符的位置

abca....za

当遇到第一个a时,pre=-1,

2 a时,pre=1

3 a时,pre=3

在O(n)的寻找过程中,记下以当前字符结尾的最长为重复字符子串,pre是以k结尾往前的重复字符的重复字符的位置。

它是先取pre的值,然后再计算最长无重复子串,所以最后一个a可以计算到之前一个a的距离。当遇到z时由于和第2个a不相同,所以pre不更新。

pre的初始值是-1。

6.折半查找

可以写等号,因为最后找到同一个,mid也是同一个,如果a[mid]<a[h]》l=mid+1,如果a[mid]>[l]=》h=mid-1;

所以不管大于还是小于l和h都会不符合,while循环终止。

7.lc75颜色分类(荷兰国旗)

使用三个指针L、cur、R。

L=0,cur=0,R=arr.length-1;

L和R指向0区或2区的外的第一个待排元素。

while循环的终止条件是cur<=R;

当cur1,cur向右移动,

当arr[cur]0,放到0区中,cur++,L++。为什么可以直接交换?因为L指向的必定是1。如果L指向的0,它会在之前的交换中被放到0区了,并且移动,L什么时候停止移动?直到它是1的时候或2的时候L不交换,L停下来了,

也不可能是2,因为如果是2它会到2区,然后cur并没有右移,还会判断一次,循环一次刚才的逻辑。

8.lc15三数之和

i和用过的比的时候重复

9.

原文地址:https://www.cnblogs.com/kltsee/p/12587793.html

时间: 2024-10-09 10:32:05

算法刷题1的相关文章

算法刷题记录

ACWING acwing 528. 奶酪 解题记录 acwing 471. 棋盘 解题记录 acwing 95 费解的开关 解题记录 dfs的几个基础示例 acwin 91~94 LEETCODE 刷题记录与资料 LEETCODE 1031. 两个非重叠子数组的最大和 dfs的几个基础示例 leetcode 刷题进展 leetcode 算法分类 原文地址:https://www.cnblogs.com/itdef/p/10854320.html

一些算法刷题的网站

1. leetcode http://leetcode.com/ 2. careerup http://www.careercup.com/ http://hawstein.com/posts/ctci-solutions-contents.html 3. glassdoor http://www.glassdoor.com/index.htm 4. topcoder http://www.topcoder.com/ 5. zoj http://acm.zju.edu.cn/onlinejudg

[转帖] 一些算法刷题的网站

1. leetcode http://leetcode.com/ 2. careerup http://www.careercup.com/ http://hawstein.com/posts/ctci-solutions-contents.html 3. glassdoor http://www.glassdoor.com/index.htm 4. topcoder http://www.topcoder.com/ 5. zoj http://acm.zju.edu.cn/onlinejudg

【算法】搞定[机试]算法刷题 全文超过80页pdf

目录 算法专题 一.树和图 1. 二叉树构造和遍历 2. 朋友圈 - 并查集 3. 公共朋友 - 非朋友圈 4. 哈夫曼树 5. 其他二叉树性质相关计算 6. 图的连通分量 7. 最小生成树 8. 单源最短路径 - dijkstra 二.枚举搜索 1. 按钮开关问题 2. 多层枚举问题 三.递归搜索 1. 简单递归 2. 递增排列组合类 3. 全排列问题 4. 草丛问题 5. 迷宫问题 6. 广度优先搜索的剪枝 7. 总操作步数固定枚举问题 四.数学问题 1. 高精度计算 2. 素数和质因子分解

按算法刷题路线

搜索:八数码,生日蛋糕,靶形数独,(虫食算),最优贸易,引水入城,埃及分数,(p1189) dp:方格取数,树网的核,旅行路线 贪心:huffman,疫情控制 生成树:灾后重建,货车运输 连通块:间谍网络,星球大战 最短路:最优贸易,社交网络 最大流:地震逃生 区间:RMQ,区间连续和 数论:hank儿子题,解方程,虫食算,向量內积,斐波那契数列 字符串:阿里打印机

九章算法刷题总结

1.实现一个memcpy函数:memcpy(void *p, void *q, unsigned len);  思路:1.注意p.q是否为NULL  2.内存重叠的情况  3.每次copy字节数:32系统可以选择4字节如int,64系统可以选择8字节如long long 2.STL中vector的实现原理 vector本质其实就是一个动态内存分配的数组,内存分配策略(元素个数): 0->1->2->4->8->16->... 相关方法:可以通过capacity函数获取当

算法刷题细节点总结

1. 关于比较器Comparator Queue<Integer> pq=new PriorityQueue<Integer>(new Comparator<Integer>(){ public int compare(Integer a, Integer b){ // 这里要严格写成和上面的一样 return b-a; } }); 原来上面的compare方法中参数类型写成了 int, 以为也能编译通过,结果不行,要严格和Comparator中的泛型一致.自定义了比较

算法刷题-1-单链表操作

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 //练习单链表操作:给出单链表 head 和 n,要求删除单链表倒数第n个结点,并连接剩余结点 5 //例子:1-2-3-4-5,n=2,删除后应该是:1-2-3-5 6 typedef struct ListNode{ 7 int data; 8 ListNode *next; 9 }ListNode; 10 11 int create

8月leetcode刷题总结

刷题链接:https://leetcode-cn.com/explore/ 根据leetcode的探索栏目,八月份一直在上面进行刷题.发现算法题真的好难,真-计算机思维. 核心是将现实问题转化为计算机能够处理的计算问题.而这些计算问题都是通过逻辑分析来解决的. 因此逻辑-分析能力就是计算机思维的核心能力.比如将一个数组的增删改查,是通过逻辑中的 if   -else   while   这些基本语句构成的. 引用左神的算法刷题方法:" 第一阶段:对于某一个具体的算法,首先要搞清楚这个算法解决的问