数组,贪心,二分,归并排序,动态规划
考察点:思路
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.size()==0)
return false;
if(array[0].size()==0)
return false;
int n=array.size();
int m=array[0].size();
for(int i=0,j=m-1;i<n&&j>=0;)
{
if(target>array[i][j])
i++;
else if(target<array[i][j])
j--;
else
return true;
}
return false;
}
};
考察点:二分
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int left=0,right=rotateArray.size()-1;
while(left<right)
{
int mid=(left+right)/2;
if(rotateArray[mid]>rotateArray[right])
left=mid+1;
else if(rotateArray[mid]<rotateArray[right])
right=mid;
else
right--;
}
return rotateArray[left];
}
};
考察点:思路
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> reOrderArray(vector<int>& array) {
int n=array.size();
vector<int> array1(n);
int odd=0;
for(int i=0;i<n;i++)
if(array[i]%2)
odd++;
int index1=0,index2=odd;
for(int i=0;i<n;i++)
{
if(array[i]%2)
array1[index1++]=array[i];
else
array1[index2++]=array[i];
}
return array1;
}
};
考察点:思路
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
if (matrix.size() == 0)
return res;
int up = 0;
int down = matrix.size() - 1;
int left = 0;
int right = matrix[0].size() - 1;
while (up <= down && left <= right) {
for (int i = left; i <= right; i++)
res.push_back(matrix[up][i]);
up++;
if (up > down)
break;
for (int i = up; i <= down; i++)
res.push_back(matrix[i][right]);
right--;
if (left > right)
break;
for (int i = right; i >= left; i--)
res.push_back(matrix[down][i]);
down--;
if (up > down)
break;
for (int i = down; i >= up; i--)
res.push_back(matrix[i][left]);
left++;
if (left > right)
break;
}
return res;
}
};
考察点:哈希,思路
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int n=numbers.size();
unordered_map<int,int> mp;
for(int i=0;i<n;i++)
{
mp[numbers[i]]++;
if(mp[numbers[i]]>n/2)
return numbers[i];
}
return 0;
}
};
考察点:动态规划,贪心
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int n = array.size();
vector<int> dp(n, 0);
dp[0] = array[0];
int maxn=dp[0];
for (int i = 1; i < n; i++)
{
dp[i]=max(dp[i-1]+array[i],array[i]);
maxn=max(maxn,dp[i]);
}
return maxn;
}
};
考察点:贪心,排序
class Solution {
public:
static bool cmp(string a,string b){
return a+b<b+a;
}
//C++11的话直接用to_string(int n)
static string toString(int n){
if(n==0)
return "0";
string str="";
int m;
while(n){
m=n%10;
n/=10;
str+=('0'+m);
}
reverse(str.begin(),str.end());
return str;
}
string PrintMinNumber(vector<int> numbers) {
string res="";
vector<string> strs;
for(int i=0;i<numbers.size();i++)
strs.push_back(toString(numbers[i]));
sort(strs.begin(),strs.end(),cmp);
for(int i=0;i<strs.size();i++)
res+=strs[i];
return res;
}
};
考察点:归并排序
class Solution {
public:
int mod = 1000000007;
int merge(int left, int right, vector<int>& data, vector<int>& temp) {
//终止条件
if (left >= right)
return 0;
//为防止left+right超出整形范围可以这样写left+(right-left)/2
int mid = (left + right) / 2;
int res = merge(left, mid, data, temp) + merge(mid + 1, right, data, temp);
res %= mod;
int i = left, j = mid + 1;
for (int k = left; k <= right; k++)
temp[k] = data[k];
for (int k = left; k <= right; k++) {
if (i == mid + 1)
data[k] = temp[j++];
else if (j == right + 1 || temp[i] < temp[j])
data[k] = temp[i++];
else{
data[k] = temp[j++];
res += mid + 1 - i;
}
}
return res%mod;
}
int InversePairs(vector<int> data) {
int n = data.size();
vector<int> temp(n);
return merge(0, n - 1, data, temp);
}
};
考察点:二分
class Solution {
public:
int find(vector<int>& data,double k){
int left=0;
int right=data.size()-1;
while(left<=right){
int mid=left+(right-left)/2;
if(data[mid]>k)
right=mid-1;
else
left=mid+1;
}
return left;
}
int GetNumberOfK(vector<int> data ,int k) {
return find(data,k+0.5)-find(data,k-0.5);
}
};
考察点:位运算,哈希
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindNumsAppearOnce(vector<int>& array) {
unordered_map<int,int> mp;
vector<int> res;
for(int i=0;i<array.size();i++)
mp[array[i]]++;
for(int i=0;i<array.size();i++)
if(mp[array[i]]==1)
res.push_back(array[i]);
if(res[0]<res[1])
return res;
return {res[1],res[0]};
}
};
考察点:思路
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& numbers) {
set<int> res;
for(int i=0;i<numbers.size();i++)
if(!res.insert(numbers[i]).second) return numbers[i];
return -1;
}
};
考察点:思路
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> res(A.size(),1);
//前缀和
for(int i=1;i<A.size();i++)
res[i]=res[i-1]*A[i-1];
//后缀和
int ans=1;
for(int i=A.size()-1;i>=0;i--){
res[i]*=ans;
ans*=A[i];
}
return res;
}
};
我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful
有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|
我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,
或者好像我必须自己写方法?(保持DHA不变):ruby-1.9.2-p180:001>s='omega-3(DHA)'=>"omega-3(DHA)"ruby-1.9.2-p180:002>s.capitalize=>"Omega-3(dha)"ruby-1.9.2-p180:003>s.titleize=>"Omega3(Dha)"ruby-1.9.2-p180:005>s[0].upcase+s[1..-1]=>"Omega-3(DHA)" 最佳答案 如果我的回答只是垃圾,我深表歉意(我不做ruby)。但我相信我已经为您找到了答
我有这个字符串:auteur="comtedeFlandreetHainaut,Baudouin,Jacques,Thierry"我想删除第一个逗号之前的所有内容,即在这种情况下保留“Baudouin,Jacques,Thierry”试过这个:nom=auteur.gsub(/.*,/,'')但这会删除最后一个逗号之前的每个逗号,只保留“Thierry”。 最佳答案 auteur.partition(",").last#=>"Baudouin,Jacques,Thierry" 关于rub
我有一个以时间戳为键的哈希。hash={"2016-05-31T22:30:58+02:00"=>{"path"=>"/","method"=>"GET"},"2016-05-31T22:31:23+02:00"=>{"path"=>"/tour","method"=>"GET"},"2016-05-31T22:31:05+02:00"=>{"path"=>"/contact_us","method"=>"GET"}}我订购了这个系列并得到了第一双这样的:hash.sort_by{|k,_|k}.first.first但是我该如何删除它呢?删除方法requiresyou知道key的准确
我有一个字符串数组,我需要从中提取第一个单词,将它们转换为整数并获得它们的总和。示例:["5Apple","5Orange","15Grapes"]预期输出=>25我的尝试:["5","5","15"].map(&:to_i).sum 最佳答案 我从你的问题中找到了答案。["5Apple","5Orange","15Grapes"].map(&:to_i).sum在数组中,如果存在任何整数可转换值,那么它将自动转换为整数。 关于arrays-字符串数组中字符串第一部分的总和,我们在Sta
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>
在我看来,我正在尝试显示一个对象表,这是我的代码:CategoriesCBB's">然而这是抛出一个错误说:can'tconvertCapabilityBuildingBlockintoArray关系是正确的,错误来self尝试在此处减去数组的第一个对象的行:有什么方法可以忽略数组中的第一个对象来遍历数组吗?谢谢 最佳答案 尝试使用Array.drop-http://www.ruby-doc.org/core/classes/Array.html#M000294 关于ruby-on-ra
我正在使用FasterCSV我正在循环使用这样的foreachFasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv",:encoding=>'u',:headers=>:first_row)do|row|但问题是我的csv将前3行作为标题...有什么方法可以使fasterCSV跳过前三行而不是仅跳过第一行?? 最佳答案 不确定FasterCSV,但在Ruby1.9标准CSV库(由FasterCSV制作)中,我可以执行以下操作:c=CSV.open'/path/to/