《剑指offer》算法题第一天】的更多相关文章

数组中只出现一次的数字(一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字): 解法在于位运算中的异或,直接异或可以得到这两个数的异或,按照最后的有效数字位可以分为两个数组,然后分别异或得到各自的值: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { if(data.size()==0) return; *num1=0; *num2=0; vector<int> d…
剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行,只不过这本书的算法多看了几遍多做了几遍多了点心得体会.于是想总结一下.如果有错误也希望能指出,谢谢. 具体代码可以参考我的GitHub仓库: https://github.com/h2pl/SwordToOffer 数论和数字规律 从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的…
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.     解析: 1.有了行和列,我们就得在数组中选取一个数去array[ i][ j]和target比较大小,在这里我选取的是右上角的数去和target比较 a)如果array[ i][ j] > target 则向左走 即…
剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少.算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定.如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然. 不过无论底数是什么,log级别的渐进意义是一样的.也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的. 我们先考虑O(logx…
剑指Offer编程题2——替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   题目解析: 从前向后扫描时,移动元素会出现覆盖的情况,因此选择从后往前扫描: 遇到空格时,将空格以后的字符串都向后移动两个位置,空格处放%,因此需要从最后一个元素开始移动,避免元素覆盖. 代码 class Solution { public: void replaceSpace(char…
36.两个链表的第一个公共节点 题目描述 输入两个链表,找出它们的第一个公共结点. 1.具有重合节点的两个链表是一个Y字性,用两个堆栈放这两个链表,从尾部开始遍历,直到遍历到最后一个重合节点. 这种算法时间复杂度为O(m+n),但是空间复杂度也是O(m+n),相当于是空间换时间 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ import jav…
二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两种思路各有优势: 1.行枚举列二分O(nlogm)(列二分行枚举O(mlogn)) 2.从左下角或右上角移动O(m+n) 如果n,m一个特别大一个特别小选择方案1效率很高 其他情况选择第2中方案   替换空格: 题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We A…
LeetCode过程中值得反思的细节 以下题号均指LeetCode剑指offer题库中的题号 本文章将每周定期更新,当内容达到10题左右时将会开下一节. 二维数组越界问题04 public static void main(String[] args) { int[][]x = {{}}; System.out.println(x.length+" "+x[0].length); int[][]y = {{1}}; System.out.println(y.length+"…
开篇 二刷剑指offer了,本来用Tyora记的笔记,发现字数到四万了就变得好卡o(╥﹏╥)o,刚好开始写博客,就转过来吧,记下来子自己看.不废话,开刷... JZ26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值. 限制: 0 <=…
1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. 这个题目的核心思想是考虑:每个位是任意数字时,可以包含多少个这个位为1的数字 分了三种情况 class Solution { public int countDigitOne(int n) { //digit表示位因子,就是10.100.1000... long digit=1; int cou…