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;//如果重新计算出的新值和原来的数值一样,说明是回文数
}