• LeetCode Weekly Contest 27


    Reverse Words in a String III 

    简单暴力翻转

    class Solution {
    public:
    	string rev(string s)
    	{
    		int len=s.length();
    		int i=0,j=len-1;
    		while(i<j)
    		{
    			char temp=s[i];
    			s[i]=s[j];
    			s[j]=temp;
    			i++;
    			j--;
    		}
    		return s;
    	}
        string reverseWords(string s) {
            int len=s.length();
            string ans="";
            int j=0,i;
            for(i=0;i<len;i++)
            {
            	if(s[i]==' ')
            	{
            		string b=s.substr(j,i-j);
            		ans=ans+rev(b)+" ";
            		j=i+1;
    			}
    		}
    		string b=s.substr(j,i-j);
    		ans=ans+rev(b);
    		return ans;
        }
    };
    

     Brick Wall

    使用map或者set存一下数据就能轻松ac

    class Solution {
    public:
        int leastBricks(vector<vector<int> >& wall) {
           	map<int,int> st;
            int len=wall.size();
            int ans=0,mx=0;
            for(int i=0;i<len;i++)
            {
            	int wid=wall[i].size();
            	int sum=0;
            	for(int j=0;j<wid;j++)
            		sum+=wall[i][j];
            	if(sum>mx)
            		mx=sum;
    		}
            for(int i=0;i<len;i++)
            {
            	int wid=wall[i].size();
            	int sum=0;
            	for(int j=0;j<wid;j++)
            	{
            		sum+=wall[i][j];
            		st[sum]++;
            		if(st[sum]>ans&&sum!=mx)
            			ans=st[sum];
    			}
    		}
    		return len-ans;
        }
    };
    

     Next Greater Element III

    给定一个32位整数n,您需要找到最小的32位整数,它与整数n中存在完全相同的数字,值大于n

    贪心思路:从个位到高位,找到第一个逆序的位,和之前的大于它的最小数字交换,然后排序比它的低位所有数就行了

    这样做保证正解的原因是我们确定了第一个可以变得更大的位,改变这个位后,这个位后面数字当然是越小越好

    int cmp(int x,int y)
    {
    	return x>y;
    }
    class Solution {
    public:
    	int b[12],a[12];
        int nextGreaterElement(int n) {
            int idx=0;
            int shit=n;
            while(n>0)
            {
            	a[idx++]=n%10;
            	n/=10;
    		}
    		memset(b,-1,sizeof(b));
    		b[a[0]]=0;
    		bool flag=true;
    		int ans=-1;
    		for(int i=1;i<idx;i++)
    		{
    			if(!flag)	break;
    			if(a[i]<a[i-1])
    			{
    				int j=a[i]+1;
    				while(j<10&&b[j]==-1)
    					j++;
    				if(j<=a[i-1])	
    				{
    					flag=false;
    				//	cout<<j<<" "<<b[j]<<endl;
    					int temp=a[i];
    					a[i]=a[b[j]];
    					a[b[j]]=temp;
    					sort(a,a+i,cmp);
    				//	cout<<i<<endl;
    				}
    			}
    			b[a[i]]=i;
    		//	printf("%d
    ",b[a[i]]);
    		}
    		int sum=0;
    		for(int i=idx-1;i>=0;i--)
    		{
    			sum=sum*10+a[i];
    		}
    		if(sum>ans&&sum>shit)
    			ans=sum;
    		return ans;
        }
    };
    

     Binary Tree Longest Consecutive Sequence II

    找二叉树的最长连续序列

    很简单的dfs,也可以说的简单树规吧。思路是每的结点的最长序列是:

    1+左子树递增最长+右子树递减最长  或者 1+左子树递增最长+右子树递减最长啦,我们的返回值存这两个东西就ok

    class Solution {
    public:
    	struct fuck{
    		int x,y;
    	};
    	int ass;
    	int fb(int x)
    	{
    		if(x>0)	return x;
    		return -x;
    	}
    	fuck dfs(TreeNode* root)
    	{
    		if(root==NULL)
    		{
    			fuck ans;
    			ans.x=0;ans.y=0;
    			return ans;
    		}
    		fuck a=dfs(root->left);
    		fuck b=dfs(root->right);
    		fuck ans;
    		ans.x=1;ans.y=1;
    		int mx,my;
    		mx=my=0;
    		if(root->left!=NULL)
    		{
    			int aa=root->left->val;
    			if(root->val-aa==1)
    				mx=max(mx,a.x);
    			else if(aa-root->val==1)
    				my=max(my,a.y);
    		}
    		if(root->right!=NULL)
    		{
    			int bb=root->right->val;
    			if(root->val-bb==1)
    				mx=max(mx,b.x);
    			else if(bb-root->val==1)
    				my=max(my,b.y);
    		}
    		ans.x+=mx;
    		ans.y+=my;
    		if(ans.x+ans.y-1>ass)
    			ass=ans.x+ans.y-1;
    		return ans;
    	}
        int longestConsecutive(TreeNode* root) {
        	ass=0;
            dfs(root);
            return ass;
        }
    };
    

     

  • 相关阅读:
    Sqlserver2005迁移至Oracle系列之二:生成存储过程
    Sqlserver:在sql2005查看索引的碎片统计情况,并给出处理意见的自动化批处理脚本
    Sqlserver:利用Sqlserver2005的数据库触发器开发的数据库审核追踪系统,可以跟踪对象的修改信息及修改源代码
    Sqlserver2005迁移至Oracle系列之一:生成表
    中国软件业的现状浅析
    Java之异常与错误的区别及java的异常体系
    SQL优化34条
    swftools转换文件时线程堵塞问题的解决方法
    中国软件开发需要注意的地方
    Flex 应用内存泄露的分析与诊断
  • 原文地址:https://www.cnblogs.com/bitch1319453/p/6684181.html
Copyright © 2020-2023  润新知