设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素也仅仅能从头到尾进行查找,在查找的过程中,设定两个指针,当中p指针指向当前訪问的节点,q指针指向p之前的节点,且两者之间相距m个节点,这样,当p指针指向最后一个节点时,那q指针指向的元素就是倒数第m个元素,程序的处理步骤例如以下: #include <stdio.h> #include <m…
阅读本篇博客之前需要了解VS窗体设计器的工作原理,详细可参见本系列博客(十).(十一).(十二).必须需要知道的一条结论就是:处于窗体设计器(Form Designer)中的任何组件(包含控件,下同),都是实际存在的一个实例.也就是说,拖进去的button1,其实就是实例化一个Button控件. 通常编码中,我们在使用一个类型对象时,通过以下方式: Car c = new Car(); //实例化对象 c.Type = “标致308”; //设置属性 c.Color = Color.Black;…
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew" 输出…
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成“去重”与“排序”的工作. Input Param n               输入随机数的个数 inputArray      n个随机整数组成的数组 Return Value OutputArray    …
背景 我在公司内负责自研的dubbo注册中心相关工作,群里经常接到业务方反馈dubbo接口注销报错.经排查,确定是同一个接口调用了两次注销接口导致,由于我们的注册中心注销接口不能重复调用,调用第二次会因为实例已经注销而报实例找不到的错误. 虽然这个报错仅会打印一条错误日志,不影响业务,但本着 follow through的精神,我决定还是一探究竟,更何况重复注销也增加了应用的结束时间,影响了发布回滚速度. 问题复现 拿到业务方的dubbo版本,基于开源2.7.3内部定制的一个版本,该版本修改主要…
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且只能遍历一次字符串. 解析:本题的解法类似于快速排序partition算法,对于字符串str,利用两个下标start1,end1,start1初始时指向字符串的头部,end1初始时指向字符串的尾部,当str[start1]!='R',str[end1]!='B'时候,不能简单像原来的partition那样直接…
产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复 用一个ArrayList存储1到100然后随机产生0到arraylist.size()之间的数字作为下标然后从arraylist中remove掉刚产生的那个下标的数存到数组中,直到arraylist中的size为0即可,这样就不用去判断浪费大量时间,用set的话虽然表面上没做判断,实际上也是判断过的 public class Rand {       public static void main(String[] ar…
该问题有两种方法: 一 利用两个数组,此法简单,不讨论 二 利用一个数组,从第0个开始依次取元素,并在其后元素中查找是否有该元素,有则删掉后面的重复元素,依次遍历.---但是这种情况要特别注意,当后续元素中有连续的重复元素时,如不加上y--使y(待比较的后续元素)回退一个,很可能会因为我们删掉当前重复元素y后其后的连续重复元素顶上,导致忽略掉顶上的重复元素. 代码如下: public static void main(String[] args) { ArrayList array=new Ar…
""" #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个空字典,去存储列表中的值和值出现的次数 2.使用L.count()方法可以统计出L中值出现的次数 3.使用sorted方法可以进行排序,sorted(iterable,key,reverse) 注意key是函数 4.列表中的元祖取值 d[i][j] i是哪一个元祖,j是元祖中的第几个值 ""…
不留: [抄题]: 给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素. [思维问题]: 给出 1->2->3->3->4->4->5->null,返回 1->2->5->null 给出 1->1->1->2->3->null,返回 2->3->null [一句话思路]: dummy node,防止出现无头链表,不能返回. [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常…
[题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左到右遍历字符串,遍历到每个字符的时候,以当前字符作为中心能够产生多大的回文字符串, 奇回文和偶 回文寻找方式不一样. 缺点:前面的寻找无法为后面的寻找提供任何帮助.没有记忆.加上记忆就好了. [Manacher] Manacher算法解决的问题是在线性时间内找到一个字符串的最长回文子串. 奇回文和偶回味在判断…
过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: import string allchars = string.maketrans('','') #all chars table def makefilter(keep): delchars = allchars.translate(allchars,keep) def thefilter(s): retu…
题目:给定一个长度为N的数组,其中每个元素的取值范围都是1到N.判断数组中是否有重复的数字.(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同.时间复杂度为O(nlogn),空间复杂度为O(1). 方法2.使用bitmap方法.定义长度为N/8的char数组,每个bit表示对应数字是否出现过.遍历数组,使用 bitmap对数字是否出现进行统计.时间复杂度为O(n),空间复杂度为O(n). 方法3.遍历数组,假设第 i 个位置的数字为 j ,则通过交换将 j 换到下…
// 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba abb baa bab bba bbb Input: set[] = {'a', 'b', 'c', 'd'}, k = 1 Output: a b c d package recursion; import java.util.ArrayList; public class N_sets_form…
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后,返回数组可能的最大和. 示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]. 例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]. 示例 3:…
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 最大利润 = 6-1 = 5 .注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格. 示例 2: 输入: [7,6,4,3,1] 输出…
设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常.(只有 XYZ 和 ABC 两种输入). class xyz { public void test(String x) { if(x.equals("xyz")) { try{ throw new exception(x);} catch(exception e){e.printStackTrac…
/** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; public static void countString(String s) { while (s.length() > 0) { String oldStr = String.valueOf(s.charAt(0)); String newStr = s.replace(oldStr, &quo…
题意:有最少用多少条边不重复的路径可以覆盖一个张无向图 ,输出每条路径的边的序号 , 如果是反向就输出-id. 也就是可以多少次一笔画的方式画完这个无向图. 题解:我们已知最优胜的情况是整个图是欧拉图的时候 ,我们只需要一笔就搞定了 , 可是现在这个图并不是一个欧拉图, 所以现在问题是其转化为欧拉图 ,那我们根据欧拉图的性质 , 如果一个无向图是欧拉图的时候当且这个图有奇数的度的点有0个或者是2个 , 而且如果是两个的话那这两个点肯定是起点或者终点  ;  所以现在我们就遍历整个图的奇数点将其连…
需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 bbb  baa 替换为 bbb  abaabaaabaa 替换为 abbbbaaabbb 中间三个a不作替换 源代码如下ReplaceTest.java: package com.test.zhipengs; /** * A Question * 给定一个字符串str,将str中连续两个字符为a的…
import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output) 其中input是输入字符串,output是输出字符串 * * */ public class Test { public static void main(String[] a…
题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't'都只出现一次.因此'e'必须出现在'r'和't'之前.此外,"eetr"也是一个有效的答案. 示例 2: 输入:"cccaaa" 输出:"cccaaa" 解释:'c'和'a'都出现三次.此外,"aaaccc"也是有效的答案.注意&…
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ //接受参数 $str = input('param.str'); //定义空数组 $arr = []; //循环所有的字符串里的字符 for($i=0;$i<strlen($str);$i++){ //判断是否存在 if(isset($arr[$str[$i]])){ //存在次数+1 $arr[…
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include<stdio.h> #include<time.h> #include<stdlib.h> int getchar(); void test(int array[]); int main(){          int data[4][10];          for(int i = 0;i < 4;…
前言:周末闲来无事,在七月在线上看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直接上笔记吧. 一.字符串 java:String内置类型,不可更改.(如需更改可考虑:StringBuffer, StringBuilder,char[]等) 二.归类 字符串涉及到的相关题型通常会是以下几个方面: 概念理解:字典序 简单操作:插入删除字符.旋转 规则判断(罗马数字转换 是否是…
谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地区笔试题 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数.比如,A=[1,0] K=21 那么输出结构应该为100. <pre name="code" class="…
前言:周末闲来无事,看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直接上笔记吧. 一.字符串 java:String内置类型,不可更改.(如需更改可考虑:StringBuffer, StringBuilder,char[]等) 二.归类 字符串涉及到的相关题型通常会是以下几个方面: 概念理解:字典序 简单操作:插入删除字符.旋转 规则判断(罗马数字转换 是否是合法的整数.…
上篇文章(http://www.cnblogs.com/zzqcn/p/3508442.html)里提到的BF和KMP算法都是单模式串匹配算法,也就是说,模式串只有一个.当需要在字符串中搜索多个关键字(模式)时,则需要用到多模式串匹配算法. 简介 AC(Aho-Corasick)算法是一个经典的多模式串匹配算法,它借鉴了KMP算法的思想,可以由有限状态机(Finite State Automata:FSA)来表示.AC算法的基本原理是: 先根据多模式串建立一个有限状态自动机FSA,在进行模式匹配…
简单动态字符串 Sds (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 sds. 本章将对 sds 的实现.性能和功能等方面进行介绍, 并说明 Redis 使用 sds 而不是传统 C 字符串的原因. sds 的用途 Sds 在 Redis 中的主要作用有以下两个: 实现字符串对象(StringObject): 在 Redis 程序内部用作 char* 类型的替代品: 以下两个小节分别对这两种用途进行介…