剑指Offer(第二版)题目总结

数据结构

数组

数组中重复的数字

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1
的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

解题思路:
哈希表(看到还有原地算法不过还不会)
哈希表的建立 unordered_map<type,type> name;
代码:

int findRepeatNumber(vector<int>& nums) {
	unordered_map<int, bool> mymap; //建立哈希表 key int value bool
    for(int i:nums){ //遍历
    	if(mymap[i])
        	return i; //如果哈希表中有该元素对应的value为true 就返回该key
         mymap[i]=true;	//没有的话将其添加进入哈希表中
    }
    return -1; //不重复返回呗
}

二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路:
由于该二维数组的排列每一行都是按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,所以可以从右上角开始,如果比右上角的数大的话就去除该数所在的行,如果比它小的话就去除该数所在的列。(从左下角开始同理)
代码:

//以右下角开始为例来看
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
	if(matrix.size()==0)
        return false;
    int i=matrix.size()-1;
    int j=0;
    while(i>=0&&j<matrix[0].size()){
        if(target==matrix[i][j])
            return true; //相等,说明找到了
        else if(target>matrix[i][j])
            j++; //比target大的话就不看该数所在的列了
        else
            i--; //比target小的话就不看该数所在的行了
    }
    return false; //没找到呗
}

字符串

替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
解题思路:so easy~
代码:

string replaceSpace(string s) {
    string res="";
    for(auto i:s){
        if(i==' ')
            res+="%20";
        else
            res+=i;
    }
    return res;
}

链表

从头到尾打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
解题思路:
方法一 菜鸟的常规思路 先保存再倒置
方法二 栈 入栈出栈从头到尾
其它递归等…
代码:

//方法一
vector<int> reversePrint(ListNode* head) {
    vector<int> res;
    while(head!=nullptr){
        res.push_back(head->val);
        head=head->next;
    }
    reverse(res.begin(),res.end());
    return res;
}
//方法二
vector<int> reversePrint(ListNode* head) {
    stack<int> stack1;
    while(head!=nullptr){
        stack1.push(head->val);
        head=head->next;
    }
    //这里必须用一个变量来表示栈的大小
    //因为后续for循环中会有入栈出栈操作 栈的大小会发生改变 产生差错
    int size=stack1.size();
    vector<int> res;
    for(int i=0;i<size;i++){
        res.push_back(stack1.top());
        stack1.pop();
    }
    return res;
}

重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
解题思路:

代码:

二叉树的下一个节点

栈和队列

用两个栈实现队列

算法和数据操作

递归和循环

斐波那契数列

青蛙跳台阶问题

查找和排序

旋转数组的最小数字

回溯法

矩阵中的路径

机器人的运动范围

动态规划与贪婪算法

剪绳子

位运算

二进制中1的个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值