0
点赞
收藏
分享

微信扫一扫

Leetcode题目合集

德州spark 2022-02-03 阅读 73

排序算法通常有选择排序、冒泡排序、快速排序、插入排序等等
选择排序:从左往右,第一个数据依次和后面的每个数据进行比较,每一轮排出最大或者最小那个数,然后再进行第二轮排序O(n^2)
冒泡排序:相邻两个数进行排序,每次也是找出最大或者最小那个数,再进行下一轮,同选择排序
快速排序:找一个基准数,比它小的放左边,比它大的放右边,这样分成2类,然后再各自递归一次,通过每次查找出基准数的中间数来实现O(nlog2n)
插入排序:从左往右,依次将2个数整理成有序,然后第三个数插入前面2个有序数,再后面第四个数插入前面3个有序数中,依次进行

A.简单题

1.2数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

一次循环搞定的方法:做一个hashmap,key是值,value是数组对应index
for(i = 0; i < n; i++) {
if (hashmap.contains(num[i])) {
xxxx
}
hashmap.put(target-num[i]) //存入补数,
}

2.整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [?231, 231 ? 1] ,就返回 0。
123->321 -123->-321
solution:
while(x) {
n = n*10 + x%10;
x = x/10;
}
return n > INX_MAX || n < INT_MIN 0:n;

3.回文数
121就是回文数,-121就不是
solution:
和整数反转差不多思想

4.罗马数字转数字
直接将对应罗马数字映射为数字即可

5.最长公共前缀
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
正常解法:从下标0开始,看是不是所以都包含,然后再看下标1,依次排序
或者先看第一第二个公共子串,再依次后后面的比较

6.有效的括号
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
必须是双数,从中间开始消除,直到最后 String.replace();

7.合并两个有序链表
123 169 ->12369

8.删除有序数组中的重复项
11234->1234
快慢指针的方式,有序数组,相同值下表肯定是连续的,快指针用来寻找不同的那个值,慢指针用来标记数,当快指针越界的时候,返回慢指针下标

9.移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
所谓原地,就是在原来数组直接覆盖

10.实现strStr
也就是某个字符串出现在另外一个字符串中第一次出现的位置

11.定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

快速排序

12.最大子数组之和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

动态规划

13.最后一个单词的长度
hello world luck is happy
通过split分拆空格,然后找到最后那个单词

  1. sqrt(x)
    用二分法查找

15.删除排序链表中重复元素
注意是排序链表,也就是说重复元素一定是相邻的
因此,可以使用快慢指针的方法

16.合并2个有序数组
java中由sort函数,可以自动排序

17.二叉树,红黑树

举报

相关推荐

0 条评论