博客专栏  >  编程语言   >  Data structures and algorithms

Data structures and algorithms

面试和工作中常用的数据结构和算法的总结以及leetcode中部分面试题的代码实现和算法思路解析

关注
3 已关注
41篇博文
  • 2016小米在线编程题解

    题目一世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?思路:很简单啊,异或操作,然后右移算出1的个数。class Solution...

    2016-10-21 12:57
    911
  • [leetcode] 162 Find Peak Element(二分)

    这题要求我们在一个无序的数组里找到一个peak元素,所谓peak,就是值比两边邻居大就可以了。 对于这道题目,最简单的解法就是遍历数组,只要找到第一个符合要求的元素就可以了,时间复杂度为O(n)...

    2015-11-19 13:09
    2592
  • [leetcode] 134 Sort List (链表 & 归并排序)

    首先看到题目中要求时间复杂度 O(n log n),时间复杂度为常数的时候,先将最容易实现的插入排序排除(O(n^2));接着想到快速排序和归并排序, 但是快速排序的最坏时间复杂度也为O(n^2),...

    2015-11-17 22:55
    932
  • [leetcode] 219 Contains Duplicate II(map)

    思路一: 使用map映射 记录出现过的nums[i],并记录对应的位置i ;当出现冲突时,比较两者位置关系,如果之差小于等于k,则返回true,否则更改为新位置;如果没有冲突,则说明不含有重复元...

    2015-11-08 21:35
    745
  • [leetcode] 16 3Sum Closest(数组)

    暴力循环的时间复杂度是O(N^3),肯定是不可取的。我们要充分利用题目中的条件进行分析,如何才能相对高效的比较数组中指定个数元素的和  和target的大小呢? 我们可以先对数组进行排序,如果是计算...

    2015-11-08 20:25
    1467
  • [leetcode] 43 Multiply Strings(模拟大数乘法)

    很简单的题目,模拟大数乘法。 思路:  第一个字符串的第i位乘以第二个字符串的第j位一定是结果的第i+j位,如果i+j已经有值,直接加上去就OK,并用temp保存进位, 最后记得将结...

    2015-11-03 22:24
    3077
  • [leetcode] 80 Remove Duplicates from Sorted Array II(数组下标操作)

    因为这道题目的题意是要求我们在原数组上进行操作,所以操作变得稍微复杂了些,否则直接使用map最为简单。 基本思想是记录两个指针,一个是当前数组,另一个是目的数组,注意如果发现重复数超过2,那么目的数...

    2015-10-30 22:39
    3025
  • [leetcode] 120 Triangle

    感觉acm做过之后,这种题太基本了.... 没啥好说的,最简单的动态规划,找出状态转移方程就可以了。采用由下到上的思想(这样最后只需要取出dp[0][0]就是答案),本层每个结点的结果根据下面一行的...

    2015-10-27 23:40
    2758
  • [LeetCode]268 Missing Number

    很简单,提供两种解法。 (1)等差数列先求得总和,然后减去给定的队列,剩下的值就是缺失值。 (2)先排个序,逐个比较,不等的直接return 第一种的代码: class Solution { ...

    2015-10-25 00:16
    2678
  • [leetcode] 279 Perfect Squares(DP,四平方和定理)

    1. 四平方和定理 定理表明 每个正整数均可表示为4个整数的平方和。也就是说这个题的答案,我们可以先在数组中预处理出平方和,然后两层for循环暴力循环判断1,2,顺便可以由剩下的检验一下是不是3,都不...

    2015-10-24 21:31
    1383
  • [leetcode] 200 Number of Islands(DFS)

    非常基础的一道DFS深度优先搜索的题目,当我们遍历数组发现一个位置为'1'时,就是用dfs将其周围的1全部变为0,然后递归继续,这样所有连通成一片的'1'就是一个island,sum++,最后返回su...

    2015-10-12 23:12
    1801
  • [leetcode] 24 Swap Nodes in Pairs(交换链表相邻结点)

    (一)迭代法 在处理这种问题时,我们通常加上一个dummy头结点指向head,至于思路很清晰了就是隔一个去交换两个相邻结点,比如1->2->3->4->NULL,我们先通过指针交换1和2,再交换3和...

    2015-10-05 14:03
    1577
  • [leetcode] 221 Maximal Square(最大全1正方形 &动态规划)

    当我们判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上方三个点也一定是某个正方形的右下角,否则该点为右下角的正方形最大就是它自己了。这是定性的判断,那具体的最大正方形边长呢?我们知道...

    2015-10-04 23:04
    3996
  • [leetcode] 22 Generate Parentheses(递归)

    简单的递归构造。小括号串是一个递归结构,跟单链表、二叉树等递归结构一样,首先想到用递归。一步步构造字符串。当左括号出现次数小于指定的n时,可以放置新的左括号。当右括号出现次数小于左括号出现次数时,就可...

    2015-10-01 23:20
    2417
  • [leetcode] 134 Gas Station(经典dp || 贪心)

    (一)最容易想到的是O(n2)的解法 预处理出gas[i] - cost[i] 的数组,从每个非负的位置开始尝试,只要能够完成一个循环,就可以输出结果; 对于返回-1的情况,我们经过思考和推论可以...

    2015-09-28 14:31
    1516
  • [leetcode] 136 &137 Single Number Ⅰ Ⅱ

    136; 题意很简单,给你一个数组(int),只有一个数字是出现一次的,其余出现两次,不允许使用额外空间,时间复杂度线性。 如果允许使用额外空间的话,可以使用map记录次数,最后遍历,也是O(n)...

    2015-09-25 00:00
    1297
  • [leetcode] 152 Maximum Product Subarray

    先来一个比较简单的题目,也是出现较多的,求连续的最大子数组和,见hdu 1003. 比较简单的动态规划,如果当前的连续和小于0时,再加则一定会小于nums[i]的当前值,此时应该取nums[i]. ...

    2015-09-22 23:54
    2338
  • [Leetcode] 11 Container With Most Water

    首先,刚看到这道题的时候,我是往动态规划方向去想的,后来构造不出转移方程。所以再次进行思考,想按照三种方式取最大值即: 1)right左移一位 2)Left右移一位 3)Right左移一位,le...

    2015-09-18 15:22
    1191
  • [leetcode] 139 Word Break

    这题可以用DFS做,但是更好的方法是使用DP,这种类型的DP感觉还是接触的稍微有些少。 题目中只要求源串分出来的词只要都在字典里就好,所以我们可以用dp[i] 表示源串的前i个字符可以满足分割,...

    2015-09-13 23:32
    1786
  • [leetcode] 179 Largest Number

    拿到这个题的第一个想法是 将int转换成string,然后按照string的比较规则,但是发现  13 那么何不我们直接比较下两者的组合,取其较大的呢,由此自定义优先级比较即可。 注意处理...

    2015-09-12 12:24
    1330
img博客搬家
img撰写博客
img专家申请
img意见反馈
img返回顶部