移除元素&&搜索插入位置&&赎信金&&回文数

1、移除元素
*给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
给定 nums = [3,2,2,3], val = 3,
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,1,2,2,3,0,4,2], val = 2,
函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
注意这五个元素可为任意顺序。
你不需要考虑数组中超出新长度后面的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element

int removeElement(vector<int>& nums, int val) {
        int a=nums.size();
        int j=0;
        for(int i=0;i<a;i++)
        {
            if(nums[i]!=val)
            nums[j++]=nums[i];
        }
        return j;
        

2、搜索插入位置
*给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position

 int searchInsert(vector<int>& nums, int target) {
        int tmp=0;
        int a=nums.size();
        for(int i=0;i<a;i++)
        {
            if(nums[i]==target)
            {
                tmp=i;
                break;
            }
            else if(nums[a-1]<target)
            {
                tmp=a;
                //break;
            }
             else if(nums[0]>target)
            {
                tmp=0;
            }
             else if(nums[i]>target)
            {
                tmp=i;
                break;
            }
        }
        return tmp;
    }

3、赎信金
*给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)
注意:
你可以假设两个字符串均只含有小写字母。
canConstruct(“a”, “b”) -> false
canConstruct(“aa”, “ab”) -> false
canConstruct(“aa”, “aab”) -> true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ransom-note

 bool canConstruct(string ransomNote, string magazine) {
       int a = ransomNote.length();
	int b = magazine.length();
	//int n = 0;
    int tmp[256]={0};
	for (int i = 0; i<a; i++)
	{
        tmp[ransomNote[i]]++;
    }
	for (int i = 0; i<b; i++)
	{
	    tmp[magazine[i]]--;     
	}
    for(int i=0;i<a;i++)
    {
	    if (tmp[ransomNote[i]]>0)
        {
		    return false;
        }
    }
    		return true;
    }

4、回文数
*判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number

 bool isPalindrome(int x) {
     long n=0;
      int tmp=x;
      if(x<0)//是负数,直接返回false
      {
          return false;
      }
      while(tmp!=0)
      {
          //将得到的余数重新计算。得到一个新值
          n=n*10+(tmp%10);
          tmp/=10;
      }
     return n==x?true:false;//如果重新计算出的新值和原来的数值一样,说明是回文数
    }
发布了20 篇原创文章 · 获赞 10 · 访问量 1373

猜你喜欢

转载自blog.csdn.net/JM624235197/article/details/104197963