leetcode算法(一)

771、宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。

示例 1:

输入: J = “aA”, S = “aAAbbbb”
输出: 3
示例 2:

输入: J = “z”, S = “ZZ”
输出: 0
注意:

S 和 J 最多含有50个字母。
J 中的字符不重复。
解答

class Solution {
    public static int numJewelsInStones(String J, String S) {
		 int count=0;
		 char[] J1=J.toCharArray();
		 char[] S1=S.toCharArray();
		 for(int i=0;i<J1.length;i++){
			 for(int j=0;j<S1.length;j++){
				 if(J1[i]==S1[j]){
					 count=count+1;
				 }
			 }
		 }
	     return count;   
	    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(numJewelsInStones("aA","aAAbbbb"));

	}
}

929、独特的邮件地址
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。

例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。

除了小写字母,这些电子邮件还可能包含 ‘,’ 或 ‘+’。

如果在电子邮件地址的本地名称部分中的某些字符之间添加句点(’.’),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)

如果在本地名称中添加加号(’+’),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 m.y+name@email.com 将转发到 my@email.com。 (同样,此规则不适用于域名。)

可以同时使用这两个规则。

给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?

示例:

输入:[“test.email+alex@leetcode.com”,“test.e.mail+bob.cathy@leetcode.com”,“testemail+david@lee.tcode.com”]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。

提示:

1 <= emails[i].length <= 100
1 <= emails.length <= 100
每封 emails[i] 都包含有且仅有一个 ‘@’ 字符。
解答
注意:对于单个匹配字段,如+*|\等,可以使用“\+”或者[+]进行处理

class Solution {
    public static int numUniqueEmails(String[] emails) {
    	Set<String> test = new TreeSet<String>();
    	for(String email:emails){
    		String[] a=email.split("@");
    	    //判断本地名称是否含有'+'
    		
    		String[] b=a[0].split("\\+");
    		//将'.'替换为''
    		String res=b[0].replace(".", "");
    		test.add(res+"@"+a[1]);
    	}
       return test.size(); 
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] emails={"test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"};
		//System.out.println("********************************************************************88");
        System.out.println("结果:"+numUniqueEmails(emails));
	}

}

709、转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

示例 1:

输入: “Hello”
输出: “hello”
示例 2:

输入: “here”
输出: “here”
示例 3:

输入: “LOVELY”
输出: “lovely”
解答

class Solution {
    public static String toLowerCase(String str) {
		 str=str.toLowerCase();
	     return str;   
	    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        System.out.println(toLowerCase("Hello"));
	}
}
public class Solution{

	/**
	 * @param args
	 */
	 public static String toLowerCase(String str) {
		 StringBuffer sbf = new StringBuffer();  
		 char[] ch=str.toCharArray();
		 for (int i = 0; i < ch.length; i++) {
			 if (ch[i] >= 65 && ch[i] <= 90) {
			 ch[i] += 32 ;
			
		}
			 sbf.append(ch[i]);
			 }
		 
	   
		str=sbf.toString();
	    return str ; 
	    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        System.out.println(toLowerCase("here"));
	}

}

905、按奇偶排序数组
给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。

你可以返回满足此条件的任何数组作为答案。

示例:

输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。

提示:

1 <= A.length <= 5000
0 <= A[i] <= 5000
解答
这个太垃圾了

class Solution {
    public static int[] sortArrayByParity(int[] A) {
		 ArrayList<Integer> B1=new ArrayList<Integer>();
		 ArrayList<Integer> B2=new ArrayList<Integer>();
		 for(int i=0;i<A.length;i++){
			 if(A[i]%2==0){
				 B1.add(A[i]);
			 }
			 else{
				 B2.add(A[i]);
			 }
		 }
		 for(int j=0;j<B2.size();j++){
			 B1.add(B2.get(j));
		 }
		int res[]=new int[A.length];
		for(int k=0;k<B1.size();k++){
			res[k]=B1.get(k);
		}
		return res;
		}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a={3,1,2,4};
		int[] res=sortArrayByParity(a);
		for(int i=0;i<res.length;i++){
			System.out.print(res[i]+",");
		}}
}

961、重复N次的元素
在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。

返回重复了 N 次的那个元素。

示例 1:

输入:[1,2,3,3]
输出:3
示例 2:

输入:[2,1,2,5,3,2]
输出:2
示例 3:

输入:[5,1,5,2,5,3,5,4]
输出:5

提示:

4 <= A.length <= 10000
0 <= A[i] < 10000
A.length 为偶数
解答
我得垃圾代码

package myarray;

import java.util.HashMap;
import java.util.Map;

public class Solution961 {

	/**
	 * @param args
	 */
    public static int repeatedNTimes(int[] A) {
    	Map<Integer,Integer> map=new HashMap<Integer,Integer>();
    	for(int i=0;i<A.length;i++){
    		if(map.get(A[i])==null){
    			map.put(A[i], 1);
    		}else{
    			map.put(A[i],map.get(A[i])+1);
    		}
    	}
    	for(int i=0;i<A.length;i++){
    		if(map.get(A[i])==(A.length/2)){
    			return A[i];
    		}
    	}
        return A[0];
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] A={5,1,5,2,5,3,5,4};
         System.out.print(repeatedNTimes(A));
	}

}

别人的代码

class Solution {
    public int repeatedNTimes(int[] A) {
        Set<Integer> set = new HashSet<>(A.length / 2 + 1);
        for (int i : A) {
            if (!set.add(i)) {
                return i;
            }
        }
        return 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值