<LeetCode>两数之和、数组中的重复数字、替换空格

24 篇文章 0 订阅

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

class Solution
{
	//两个指针,一个指针由前向后遍历,一个指针由后向前遍历
    public int[] twoSum(int[] nums, int target) 
    {
    	int i;
    	int res[]=new int[2];
    	for(i=0;i<nums.length;i++)
    	{
    		for(int j=nums.length-1;j>i;j--)
    		{
    			if(nums[i]+nums[j]==target)
    			{
    				res[0]=i;
    				res[1]=j;
    				return res;
    			}
    		}
    	}
		return res;
    }
}

剑指 Offer 03. 数组中重复的数字

找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3

class Solution {
    public int findRepeatNumber(int[] nums) {
            	//数字的范围是0~n-1
    	int res[]=new int[nums.length];
    	for(int i=0;i<nums.length;i++)
    	{
    		res[nums[i]]++;
    	}
    	for(int j=0;j<res.length;j++)
    	{
    		if(res[j]>1)
    		{
    			return j;
    		}
    	}
    	return -1;
    }
}

剑指 Offer 05. 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.”
输出:“We%20are%20happy.”

class Solution {
    public String replaceSpace(String s) {
        s=s.replace(" ", "%20");
    	return s;
    }
}

如果真是要手动替换的话,可以先统计空格的个数,然后开辟一个新空间,新空间的大小是原来的字符串长度(length)加上空格的个数(num)*2,然后定义两个指针(p,q),p指向新空间的末尾,q指向原来字符串的末尾,然后每当q指向的是空格,那么p就从后往前依次添加‘0’、‘2’、‘%’.

class Solution {
    public String replaceSpace(String s) {
 if (s == null || s.length() <= 0) 
        {
            return s;
        }
        //统计空格的个数
        int count=0;
        for(int i=0;i<s.length();i++)
        {
        	if(s.charAt(i)==' ')
        	{
        		count++;
        	}
        }
        
        //新空间大小
        int newSize=s.length()+count*2;
        char chars[]=new char[newSize];
        
        int p=newSize-1;
        int q=s.length()-1;
        while(p>=q && p>=0 && q>=0)
        {
        	if(s.charAt(q)==' ')
        	{
        		chars[p--]='0';
        		chars[p--]='2';
        		chars[p--]='%';
        	}
        	else
        	{
        		chars[p--]=s.charAt(q);
        	}
        	q--;
        }
        String res="";
        for(char item:chars)
        {
        	res+=item;
        }
        return res;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值