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种情况,

    取 #

    取 &

    取 #&

    都不取!!!!!

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

    思考下代码怎么写?

  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/ldphoebe/p/5937729.html
Copyright © 2011-2022 走看看