美文网首页
LeetCode 探索-初级(总结)

LeetCode 探索-初级(总结)

作者: GoMomi | 来源:发表于2018-04-15 01:01 被阅读0次

一、数组

今天(18.04.14)搞定了LeetCode 探索-初级-数组部分,在此简单做个总结。

题型
  • 从排序数组中删除重复项(移动元素)
  • 买卖股票的最佳时机 II(数学,找客观规律)
  • 旋转数组(数学,找客观规律)
  • 存在重复(遍历,空间换时间 or 排序)
  • 只出现一次的数字(数学)
  • 两个数组的交集 II(遍历,空间换时间 or 排序)
  • 加一(数学)
  • 移动零(交换)
  • 两数之和(遍历,空间换时间)
  • 有效的数独(抽象,将实际问题转为数学模型-拟人+积木)
  • 旋转图像(抽象,将实际问题转为数学模型-拟人+积木)
基本思路
  1. 数学题:一般需要找到题目所隐含的数学规律。如旋转数字,本质是利用reverse实现。只出现一次的数字,利用的一个数亦或上自己为0的规律实现。这种题目一般技巧性比较强,如果没有接触过,想不到最优解,可以试着先用暴力法解决,尝试找寻客观规律。
  2. 遍历:此类问题的解法是建立在对容器遍历的基础之上的。对于遍历,简单的思想是暴力法,优化手段一般是空间换时间、排序。遇到此类问题时可以往这两个方向思考。
  3. 抽象:此类问题的描述一般比较抽象,需要通过将现象转换为数学模型进行编程。没什么花哨的技巧,对答题者的编程基础有一定的要求。一般没思路的时候采用“拟人+积木”的方法。将数组看做是一个个的积木,思考如果是人手动操作时一个怎样的过程,再次过程中抽象出计算机的实现逻辑。

二、字符串

拖了很多天的总结,赶紧补上(18.05.03)

题型
  • 反转字符串(双指针,一头一尾向中间夹)
  • 反转整数(数学,求余取低位,加乘变高位)
  • 字符串中的第一个唯一字符(遍历,空间换时间)
  • 有效的字母异位词(遍历,空间换时间&排序)
  • 验证回文字符串(双指针,一头一尾向中间夹)
  • 字符串转整数(atoi)(落地,从思想到代码)
  • 实现strStr()(落地,从思想到代码)
  • 数数并说(落地,从思想到代码)
  • 最长公共前缀(落地,从思想到代码)
基本思路

1、双指针:涉及头尾操作的题目可以考虑采用双指针的解法,利用两个指针想中间夹。如反正、回文等。
2、数学:此类题目一般涉及的是数字型字符串,可以采用一些巧妙的数学公式来进行,最后返回的时候转换为字符串即可。
3、遍历:与数组遍历的相同,基本围绕空间换时间和排序两种思想。
4、落地:初级部分的字符串题型中设计较多此类题目。题目的描述比较简单,很容易相处核心算法,难点在于将思想落地成代码。比较考察代码的基本功,比较好的做法有最长公共前缀中的双重for,报数中i+j找起点遍历n步长的写法,具体如下:

// 报数
// 涉及找到一个起点遍历。然后在跳n个字符的做法可以参考这个实现
for (int i = 0; i < s.size(); i += j) {
  for (j = 0; j + i < s.size(); j++) {
    if (s[i] != s[i + j]) {
      break;
    }
  }
  now = now + int_to_string(j) + s[i];
}


// 从头开始遍历字符串数组
for (int i = 0; i < strs[0].length(); i++) {
  for (int j = 1; j < strs.size(); j++) {
    // 这里刚开始担心strs[j][i]有可能会越界,但实际上字符串最后一个字符是'\0',肯定不等,所以不用去特意求最短的字符串
    if (strs[j][i] != strs[0][i]) {
      return prefix;
    }
  }
  prefix += strs[0][i];
}

相关文章

  • LeetCode 探索-初级(总结)

    一、数组 今天(18.04.14)搞定了LeetCode 探索-初级-数组部分,在此简单做个总结。 题型 从排序数...

  • leetcode探索初级算法之链表

    1. 删除链表中的节点 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。...

  • leetcode探索初级算法之数组

    推荐:只出现一次的数字,旋转数组,两个数组的交集 II 和 两数之和。 1. 删除排序数组中的重复项 给定一个排序...

  • leetcode探索初级算法之数字

    1. Fizz Buzz 写一个程序,输出从 1 到 n 数字的字符串表示。1.如果 n 是3的倍数,输出“Fiz...

  • leetcode探索初级算法之其他

    1. 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明...

  • leetcode探索之旅(队列)

    首先,题目都是出自leetcode的探索里的初级算法的课程。 嘿嘿,有心想学的请自行前往学习,光看是没用的。 队列...

  • leetcode-初级-数组~总结

    1:(反转函数) 2:(java的swap()函数) 由于java中“对基本类型的变量是不支持引用传递的”,所以根...

  • leetcode探索初级算法之动态规划

    1. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法...

  • 反转字符串

    LeetCode探索初级算法字符串类 题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 c...

  • leetcode探索初级算法之排序和搜索

    1. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 ...

网友评论

      本文标题:LeetCode 探索-初级(总结)

      本文链接:https://www.haomeiwen.com/subject/pegrkftx.html