目录
1-找出数组中重复元素
2-不修改数组找出重复元素
3-二维数组中的查找
4-替换空格
5-从尾到头打印链表
6-重建二叉树--类似的题在天梯赛见到过
给自己一个小 taget 有目的才有动力
1-找出数组中重复元素给定一个长度为 n 的整数数组 nums
,数组中所有的数字都在 0∼n−1 的范围内。
数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
请找出数组中任意一个重复的数字。
注意:如果某些数字不在 0∼n−1的范围内,或数组中不包含重复数字,则返回 -1;
speclass="superseo">cial judge:
给每个数字分配一个坑,不在对应坑就交换并重复该 *** 作。
class Solution {
public:
int duplicateInArray(vector& nums) {
int n=nums.size();
for(auto x:nums) if(x<0||x>=n) return -1;
for(int i=0;i
2-不修改数组找出重复元素
给定一个长度为 n+1 的数组nums
,数组中所有的数均在 1∼n 的范围内,其中 n≥1。
请找出数组中任意一个重复的数,但不能修改输入的数组。
数据范围
1≤n≤1000
抽屉原理加分支,将数组划分为左右两边重复元素一定在么某一侧,如果说某一侧中区间内的数大于区间长度r-l+1说明重复元素在该侧,二分求解即可。
special judge:
class Solution {
public:
int duplicateInArray(vector& nums) {
int n=nums.size();
int l=1,r=n;
while(l>1;
int s=0;
for(auto x:nums) s+=(x>=l&&x<=mid);
if(s>mid-l+1) r=mid;
else l=mid+1;
}
return l;
}
};
3-二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
数据范围
二维数组中元素个数范围 [0,1000]
副对角线上的元素同一行随校表增大而增大,同一列随下标增大而减小根据这个性质能在O(n+m)时间复杂度下求出target 是否存在。
return true or false
class Solution {
public:
bool searchArray(vector> array, int target) {
if(array.empty()||array[0].empty()) return false;
int i=0,j=array[0].size()-1;
while(i=0){
int x=array[i][j];
if(x==target) return true;
else if(x>target) j--;
else i++;
}
return false;
}
};
4-替换空格
给你一个字符串用“%20”替换当中的空格。
class Solution {
public:
string replaceSpaces(string &str) {
string res;
for(int i=0;i<(int )str.size();i++){
if(str[i]==' '){
res+="%20";
}else res+=str[i];
}
return res;
}
};
5-从尾到头打印链表
给你一个链表,按照从尾到头的顺序返回结点的值,返回的结果用一个数组来存储。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector printListReversingly(ListNode* head) {
vectorres;
while(head) {
res.push_back(head->val);
head=head->next;
}
return vector(res.rbegin(),res.rend());
}
};
6-重建二叉树--类似的题在天梯赛见到过
输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。
//前序遍历是 根->左儿子->右儿子,中序遍历是左儿子- >根->右儿子;
注意:
- 二叉树中每个节点的值都互不相同;
- 输入的前序遍历和中序遍历一定合法;
数据范围
树中节点数量范围 [0,100]。
给定:
前序遍历是:[3, 9, 20, 15, 7]
中序遍历是:[9, 3, 15, 20, 7]
返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]
返回的二叉树如下所示:
3
/ \
9 20
/ \
15 7
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)