当前位置: 首页 > news >正文

塔里木油田公司档案馆网站建设研究济南建行网点

塔里木油田公司档案馆网站建设研究,济南建行网点,网站建设流程与构架,网站开发方案及报价单844 比较含退格的字符串 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入&…

844 比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

示例 2:

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。

示例 3:

输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。

解题思路:双指针法,i和j分别为字符串进行匹配的位置,初始值为字符串末尾。

cnt1为#的数量,从后开始遍历是因为前面的字符不会影响后面的。分情况讨论

(1)如果s[i]=#,cnt1++,i--

(2)如果cnt1>0,说明该字符的后面有#,该字符要删掉,i--,cnt1--

(3)其他情况,break。i即为要进行匹配字符的位置

字符串t同理

到达i,j后进行字符匹配

(1)如果i,j都大于0,s[i]!=t[j],return false

(2)i,j不同时大于0

(i)i,j只有一个大于等于0,一个小于0,return false(说明一个字符串已经匹配到开头,另一个还没匹配到开头)

(ii)i,j都小于0,说明两个字符串都匹配完了,这个可以和最后的return true合并

bool backspaceCompare(char* s, char* t) {int cnt1=0,cnt2=0,i,j;//cnt1为#个数for(i=strlen(s)-1,j=strlen(t)-1;i>=0||j>=0;i--,j--){//找到s字符串第一个要匹配的字符while(i>=0){if(s[i]=='#'){cnt1++;i--;}else if(cnt1>0){cnt1--;i--;}else break;}while(j>=0){if(t[j]=='#'){cnt2++;j--;}else if(cnt2>0){cnt2--;j--;}else break;}//匹配情况 i,j都大于等于0if(i>=0&&j>=0){if(s[i]!=t[j])return false;}else{//i,j只有一个大于等于0if(i>=0||j>=0) return false;if(i<0&&j<0)return true;}}return true;
}

977 有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

解题思路:

方法一:双指针,找出正负数的分界线split,正数平方按非递减顺序顺序,负数相反。

负数[0,split],负数[split+1,numsSize],split初始值为-1,

双指针i,j。i为最后一个负数位置,j为第一个正数位置

归并排序,分配一个新的数组空间a

(1)全为正数,i=-1小于0,j=0,从j小的开始填, a[(*returnSize)++]=nums[j]*nums[j],j++

(2)全为负数,i=numsSize-1,j=numsSize,从i小的开始填中, a[(*returnSize)++]=nums[i]*nums[i],i--

比较nums[i]*nums[i]与nums[j]*nums[j]的大小

(3)nums[i]*nums[i]<nums[j]*nums[j],填入较小的i,i--

(4)nums[i]*nums[i]>nums[j]*nums[j],填入较小的j,j++

​
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* sortedSquares(int* nums, int numsSize, int* returnSize) {int split=-1;//正负数分界线,split为最后一个负数所在位置for(int i=0;i<numsSize;i++){if(nums[i]<0)split=i;else break;}//分配数组内存空间int *a=malloc(sizeof(int)*numsSize);*returnSize=0;int i=split,j=split+1;//i为最后一个负数位置,j为第一个正数位置while(i>=0||j<numsSize){//全是正数,j=0,升序if(i<0){a[(*returnSize)++]=nums[j]*nums[j];j++;}else if(i==numsSize-1){//全是负数,降序a[(*returnSize)++]=nums[i]*nums[i];i--;}else if(nums[i]*nums[i]<nums[j]*nums[j]){a[(*returnSize)++]=nums[i]*nums[i];i--;}else{a[(*returnSize)++]=nums[j]*nums[j];j++;}}return a;
}​

方法二:双指针法,如果正负数都包含,那么最大平方必定在两边,即0或n-1的位置

双指针i,j分别指向数组边界位置,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。证明逆序,loc初始值设为n-1即可,每次循环loc--

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* sortedSquares(int* nums, int numsSize, int* returnSize) {int *a=malloc(sizeof(int)*numsSize);*returnSize=numsSize;int loc=numsSize-1;//从大的开始填for(int i=0,j=numsSize-1;i<=j;loc--){if(nums[i]*nums[i]>nums[j]*nums[j]){a[loc]=nums[i]*nums[i];i++;}else{a[loc]=nums[j]*nums[j];j--;}}return a;
}
    http://www.dtcms.com/a/463424.html

    相关文章:

  • 青田网页设计公司英文网站排名优化
  • 湖南seo网站开发怎么自己在百度上做网站
  • 重庆做网站的公司给别人做网站能赚钱吗
  • 可控核聚变龙头-公司实力对比:东方精工、弘讯科技、久盛电气、国光电器、久立特材、安泰科技
  • 电商网站建设的意义电脑要登入国外的网站应该怎么做
  • linux创建新用户,并获取docker权限
  • 哪个设计网站做兼职好新网站建设代理商
  • 做分析图地图网站lisp 网站开发
  • 一些网站只能在微信打开怎么做的东莞网络推广运营企业
  • 找做外墙油漆网站视频背景音乐怎么做mp3下载网站
  • 个人备案做运营网站注册个网站域名多少钱一年
  • 四川住房建设网站免费电子商务网站模板
  • 企业网站建设研究目的意义精神文明建设网站模板
  • 数据库网站学校学网页设计
  • 电力建设监理招聘网站wordpress教程 gofair
  • CODESYS使用CAA File库进行文件操作的详细讲解
  • 南京seo网站标题优化技巧
  • 怎么开个人网站赚钱华夏建筑工程网
  • 江苏省电力建设一公司网站网络营销设计公司
  • 做网站能赚钱吗 知乎京东云擎 wordpress 二级域名
  • [xboard] 28 busybox最小根文件系统
  • 做细胞激活的母液网站推广渠道包括哪些
  • 山东大学青岛校区建设指挥部网站什么是网站建设策划书
  • Agentic RL in Agent——Search-R1 与Memory-R1详解
  • 重庆专业网站推广时间wordpress之外的博客软件
  • 北京 工业网站建设公司医院网站建设具体内容
  • 网站好友邀请链接生成 php做网页跳转网站
  • 济南做平台网站的做珠宝商城网站
  • 建设银行打印回单网站电子商务网站建设与管理试卷
  • 网站建设工程设计图网站标题的关键字怎么写