面试代码基础(一)从strstr说起
对于写程序要注意:要能在面试官的提示下把代码写出来(把思想实现的能力)!还要注意边界检查!递归找到出口!
开场来个简单字符串匹配
int strstr(char* target,char* source){
if(target==NULL||source == NULL){
return -1;
}
int i=0,j=0;
for(int i=0;i<strlen(source)-strlen(target)+1;i++){
for(int j=0; j<strlen(target); j++){
if(source[i] != target[j]){
break;
} }
if(j=strlen(target)){
return i;
}
}
return -1; }
一:排列&&组合模板
subsets 求所有的子集
{1,2,3}
[
[],//别忘了空
[1],
[2],
[3],
[1,2],
[1,3],
[2,3],
[1,2,3],
]
在这里采用深度优先的思想
注意去除重复的:利用pos标记
1.思想:思考递归,是一个树的结构,把1开头的找出来,把2开头的,把3开头的,递归你add了什么事情,递归回来要pop掉
把list的所有子集放在rst里。记得放入空。
vector<int> &subsets(vector<int> &rst,vector<int>& num,vector<int>& list,int pos){ rst.push_back(list);
for(int i=pos;i<num.size();i++){
list.push_back(num[i]);
subsets(rst,num,list,i+1);
list.pop_back();
} }
2.扩展:带重复元素的子集,那么[1,2(2)]和[1,2(3)]就会产生重复
笨想法:在加入rst里查找是否包含!!
这样会浪费时间,有没有更方便快速的
要取相同的数必须连续的取,不允许跳过取,那么先要进行排序
a.对num排序!!!
b.跳过同样的数,这dfgui种情况不合法就跳过continue;
sort(num.begin(),num.end());
vector<int> &subsets(vector<int> &rst,vector<int>& num,vector<int>& list,int pos){ rst.push_back(list);
for(int i=pos;i<num.size();i++){
if(i != pos && num[i-1] == num[i]){
continue;
}
list.push_back(num[i]);
subsets(rst,num,list,i+1);
list.pop_back();
} }
pos [1,2,2]
[1]
pos=1;//下标是1
i=pos=1;
跳过pos往后取。
应该从pos这里开始往后取(包括pos)
但是pos没取 取pos后面的
发现i与i-1取值相同,跳过i
if(pos!=i && num[i] == num[i-1])
3.求回文分割
aab
思想 :假设aa之间有一个数#,ab之间有一个数&
那么4种情况,
取 #
取 &
取 #&
都不取!!!!!
相当于求两个数的所有子集
思考下代码怎么写?
面试代码基础(一)从strstr说起的更多相关文章
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- java面试| 精选基础题(3)
每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 系列文章 java面试| 精选基础题(1) java面试|精选基础题(2) 1.float f=3.4;是否正确? 答:不正确,编译无法通过 ...
- java面试| 精选基础题(2)
关注微信公众号"java从心",置顶公众号 每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 继续挖掘一些有趣的基础面试题,有错望指出来哈,请赐教~ 1.包装类的装箱与拆 ...
- Android逆向-java代码基础
作者:I春秋作家——HAI_ 0×00 前言 看这篇可以先看看之前的文章,进行一个了解.Android逆向-java代码基础(1)Android逆向-java代码基础(2) 之前看到有大佬用smali ...
- 003-Python3-基础语法-运行方式、代码基础要求、运算符[算数运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符、身份运算符]、运算符优先级
一.基础语法 参看地址:https://www.runoob.com/python3/python3-tutorial.html 1.1.运行方式 1.文件方式 编写一个hello.py文件, pri ...
- PHP面试大全 基础篇100道问题
2017年3月7日14:23:21 其实计划很久但是移植没时间去收集和处理弄成一个完整的文件 SVN地址: https://git.oschina.net/zxadmin/live_z 目前基础部分更 ...
- CMB面试准备-基础
1.简述 private. protected. public. internal 修饰符的访问权限 private : 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可 ...
- 细节!重点!易错点!--面试java基础篇(二)
今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...
- 细节!重点!易错点!--面试java基础篇(一)
今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在ma ...
随机推荐
- 金融量化ushare模块
一.介绍 Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据,为他们 ...
- struts2之Action获取请求参数与web元素
文章思路清晰 http://blog.csdn.net/zeqblog/article/details/8665052
- J.U.C Atomic(二)基本类型原子操作
java.util.concurrent.atomic包中对基本类型进行原子操作的类有:AtomicInteger.AtomicBoolean.AtomicLong. 下面通过一个测试程序来验证一下A ...
- Spring第四弹—–Spring的三种实例化bean的方式
1.使用类构造器实例化 1 <bean id=“orderService" class="cn.itcast.OrderServiceBean"/> 2. ...
- PAT 1122 Hamiltonian Cycle[比较一般]
1122 Hamiltonian Cycle (25 分) The "Hamilton cycle problem" is to find a simple cycle that ...
- 细说PHP的FPM
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++基础概念++ C ...
- [Python] logging.logger
<1>. mylogger = logging.getLogger("abc") logging.debug()/logging.info()/logging.warn ...
- selenium 模块
介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如 ...
- Delphi APP 開發入門(一)重生的 Delphi
Delphi APP 開發入門(一)重生的 Delphi 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀 ...
- XDU 1056
解法一:简单搜索肯定TLE,只是单纯的想写一发搜索练练手 #include<cstdio> #include<cstring> #define maxn 1005 using ...