leetcode题目思路

001.Two Sum

一、bruteforce:O(n**2)  O(1)

二、两边哈希表、一遍哈希表  O(n)  O(n)

015.Three Sum  

一、bruteforce:O(n**3) O(1)

二、排序+双指针:O(n**2)  去重/剪枝

Four Sum  排序+双层循环+双指针

020.Valid Parentheses

栈 O(n) O(n)

扩展:只有一种括号?

最长有效括号?leetcode 32.

021.Merge Two Sorted Lists

双指针 O(n+m)  O(1)

递归 O(n+m) O(n+m)

025.Reverse Nodes in k-Group

先找到k个节点结束位置next_head,然后循环翻转,每次反转同时next_head指针后移,当第一组节点反转完成之后,下一组k个节点就有找到了。注意最后一组不够k个的处理。  一遍遍历O(n)

053.Maximum Subarray

global和local的使用/滑动窗口

066.Plus One

从后往前遍历,不需要进位直接返回,需要进位,前一位加一继续循环

098.Validate Binary Search Tree

中序遍历、递归(需要设置上下界)

110.Balanced Binary Tree

递归:自顶向下O(nlogn)、自底向上(优化:每次保存上一次计算得到的高度值)(O(n))

134.Gas Station*********

一次遍历 total  cur   一次遍历、贪心  cur保证当前,tptal保证全局

136.Single Number

某个数字只出现一次,其余数字出现两次 异或

137.Single Number Ⅱ

146.LRU Cache

一、OrderedDict

二、set+双向链表

206.Reverse Linked List

prev、cur、nxt指针的使用

215.Kth Largest Element in an Array

堆排/快排

232.Implement Queue using Stacks

一个进一个出

328.Odd Even Linked List

原地

415.Add Strings

进位,python不需要考虑溢出

470.rand7() rand10()

拒绝采样,7*7=49,拒绝大于10的,idx=1+(idx-1)%10

496.Next Greater Element Ⅰ

先找出数组2中的元素的下一个更大元素,并存入字典中,再去遍历数组1

716.Max Stack

双栈  peekMax()  popMax()  popMax()时候如果两个栈栈顶元素不一样则pop并保存,找到相同的pop,然后将保存的元素重新push到两个栈中

860.Lemonade Change

贪心 five、ten计数

862.Shortest Subarray with Sum at least K

滑动窗口、记录

876.Middle of the Linked List

快慢指针

946.Validate Stack Sequences

重新进栈、与另一个对比,栈顶元素相同则pop

 

原文地址:https://www.cnblogs.com/liushoudong/p/12598415.html