zoukankan      html  css  js  c++  java
  • 面试代码基础(一)从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种情况,

    取 #

    取 &

    取 #&

    都不取!!!!!

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

    思考下代码怎么写?

  • 相关阅读:
    20210815 图论模拟赛
    20210813 杂项の模拟赛
    20210812dp模拟赛
    20210811数据结构
    html问题记录20180514
    Oracle导出表空间的创建语句、导入、导出dmp文件
    浮动子div撑开父div的几种方法、给select赋值、zoom样式的含义、实现select下拉框readonly
    Fidder教程
    JQuery插件的写法和规范
    box-sizing position calc() @media
  • 原文地址:https://www.cnblogs.com/ldphoebe/p/5937729.html
Copyright © 2011-2022 走看看