• 面试代码基础(一)从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种情况,

    取 #

    取 &

    取 #&

    都不取!!!!!

    相当于求两个数的所有子集

    思考下代码怎么写?

  • 相关阅读:
    框架学习之Spring 前言
    XML学习第二节 DTD介绍
    JavaScript重学 V512视频
    框架学习之Spring 第五节 SSH整合开发[Spring2.5+Hibernate3.3+Struts2]
    XML学习第一节 XML简介
    框架学习之Spring 第四节 Spring集成JDBC组件开发
    歌曲:酒干倘卖无 背后的故事
    又要被学校开除了!
    linux常用命令
    心情
  • 原文地址:https://www.cnblogs.com/ldphoebe/p/5937729.html
Copyright © 2020-2023  润新知