careercup-中等难度 17.4】的更多相关文章

实现中等难度通讯录.需求: 1.定义联系⼈人类Contact.实例变量:姓名(拼⾳音,⾸首字⺟母⼤大写).性别.电话号码. 住址.分组名称.年龄.⽅方法:⾃自定义初始化⽅方法(姓名.电话号码).显⽰示联系⼈人信息
 2.在main.m中定义字典,分组管理所有联系⼈人.分组名为26个⼤大写的英⽂文字⺟母.
 3.可以添加联系⼈人对象,如果姓名或电话号码为空,添加失败.添加联系⼈人到匹配的分 组.
 4.获取某个分组名称下所有联系⼈人,并且按照姓名升序排列.
 5.从通讯录中根据电话号码搜索联系⼈人…
17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对. 解答 时间复杂度O(n)的解法 我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我们就只需要遍历数组两次即可找到和为指定值的整数对.这种方法需要O(n) 的辅助空间.如果直接用数组或是bitmap来做,辅助空间的大小与数组中的最大整数相关, 常常导致大量空间浪费.比如原数组中有5个数:1亿,2亿,3亿,4亿,5亿.sum为5亿, 那么我们将bitmap中的sum-x位置1,即第4…
17.11 给定rand5(),实现一个方法rand7().也即,给定一个产生0到4(含)随机数的方法,编写一个产生0到6(含)随机数的方法. 解法: 这个函数要正确实现,则返回0到6之间的值,每个值的概率必须为1/7. 1 第一个尝试(调用次数固定) 第一个尝试时,我们可能会想产生出0到9之间的值,然后再除以7取余数.代码大致如下: int rand7() { int v=rand5()+rand5(); ; } 可惜的是,上面的代码无法以相同的概率产生所有值. 方法二: 解答 rand5可以…
17.9 设计一个方法,找出任意指定单词在一本书中的出现频率. 解法: 1 单次查询 遍历这本书的每个单词,计算给定单词出现的次数.时间复杂度O(n),我们无法继续优化它,因为书中的每个单次都需要访问一次.当然,如果我们假设书中的单词是均匀分布的,那我们就可以只统计前半本书某个单次出现的次数,然后乘以2:或是只统计前四分之一本书某个单次出现的次数,然后乘以4. 2 多次查询 如果我们要重复执行查询,那么,或许值得我们多花些时间,多花些内存,对全书进行预处理.我们可以构造一个散列表,将单词映射到该…
17.8 给定一个整数数组(有正数和负数),找出总和最大的连续序列,并返回总和. 解法: 就是求连续子序列的和最大,不过存在一个问题: 假设整个数组都是负数,怎么样才是正确的行为呢?看看这个简单的数组{-3,-10,-5},一下答案每个都可以说的通: -3(假设子序列不能为空) 0(子序列的长度为空) INT_MIN(视为错误的情况) 我们会选择第二种(maxSum=0),但并没有所谓的“正确”答案.这一点可以跟面试官好好讨论一番. C++实现代码: #include<iostream> us…
17.7 给定一个整数,打印该整数的英文描述(例如“One Thousand,Two Hundred Thirty Four”). 解法: 举个例子,在转换19 323 984时,我们可以考虑分段处理,没三位转换一次,并在适当的地方插入“thousand”(千)和“million”(百万).也即, convert(19 323 984)=convert(19)+ “ million ”+convert(323)+“ thousand ”+convert(984): C++实现代码: #inclu…
17.6 给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的.注意:n越小越好,也就是说,找出符合条件的最短序列. 解法: 开始解题之前,让我们先确认一下答案会是什么样的.如果要找的是两个索引,这表明数组中间有一段有待排序,其中数组开头和末尾部分是排好序的. 现在,我们借用下面的例子来解决此题: 1,2,4,7,10,11,7,12,6,7,16,18,19 首先映入脑海的想法可能是,直接找出位于开头的最长递增子序列,以及位于末尾的最长递增子序列.…
17.5 写一个函数来模拟游戏. 游戏规则如下: 4个槽,里面放4个球,球的颜色有4种,红(R ),黄(Y),绿(G),蓝(B).比如, 给出一个排列RGGB,表示第一个槽放红色球,第二和第三个槽放绿色球,第四个槽放蓝色球. 你要去猜这个排列.比如你可能猜排列是:YRGB.当你猜的颜色是正确的,位置也是正确的, 你就得到一个hit,比如上面第3和第4个槽猜的和真实排列一样(都是GB),所以得到2个hit. 如果你猜的颜色在真实排列中是存在的,但位置没猜对,你就得到一个pseudo-hit.比如,…
17.4 编写一个方法,找出两个数字中最大的那一个.不得使用if-else或其他比较运算符. 解法: 我们可以通过一步步的分析来将需要用到的if-else和比较操作符去掉: If a > b, return a; else, return b. If (a - b) < , return b; else, return a. If (a - b) < , 令k = ; . return a - k * (a - b). 令z = a - b. 令k是z的最高位,return a - k…
17.3 写一个算法计算n的阶乘末尾0的个数? 解答: 首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出.我们应当去分析, 是什么使n的阶乘结果末尾出现0. n阶乘末尾的0来自因子5和2相乘,5*2=10.因此,我们只需要计算n的阶乘里, 有多少对5和2.注意到2出现的频率比5多,因此,我们只需要计算有多少个因子5即可. 我们可以列举一些例子,看看需要注意些什么: !, 包含1*, 1个5 !, 包含1*,*, 2个5 !, 包含1…
一.创建存储过程 if Exists(select name from sysobjects where NAME = 'sp1LoginUser' and type='P')drop procedure sp1LoginUserGOCREATE PROCEDURE [dbo].[sp1LoginUser]-- Add the parameters for the stored procedure here@username NVARCHAR(50)ASBEGINDECLARE @identit…
1.整数转罗马数字 对任一个罗马数字可以 由12个罗马字符进行加法操作完成,且大数在左,小数在右,可以将一个数字进行拆分来求解 2.买卖股票的最佳时机 II 可将问题转换为只要相连的两天prices[i+1] - prices[i] > 0就可以盈利,然后使用累加计算总盈利 3.寻找峰值 用二分查找,如果不符合峰值条件还可以将范围缩短,减少算法复杂度 4.两个整数相除 可先将他们去绝对值,左移右移运算配合加减法,就相当于乘除法,而使用位运算,能减少循环步骤 5.x的n次幂 用二分优化累乘的过程,…
957. N 天后的牢房 思路: 模拟变换,当N天结合后返回 => 当N非常大的时候,超时 => 一般N很大的时候,这种题目必然存在循环,所以记录找过的状态,一旦出现已经访问过的状态可立即跳出循环. class Solution: def prisonAfterNDays(self, cells, N: int): vis = [] while 1: if not N: return cells if cells in vis: ind = vis.index(cells) break tce…
题目描述:给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 . 示例如下: 分析:这一题需要对比LeetCode96题来分析:https://www.cnblogs.com/KongJetLin/p/13054624.html 第96题也是求所有由 1 ... n 为节点所组成的 二叉搜索树,但是96题返回的是所有二叉搜索树的数量,因此对于96题,我们只需要使用动态规划的方法,从n=2开始,根据:dp[n] = dp[0] * dp[n-1] + dp[1] * dp[n…
题目描述:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例如下: 分析:本题可用动态规划的方法求解. 设 dp[n] 表示以 1 ... n 为节点组成的二叉搜索树的种类,我们做如下讨论: 1)当头结点的值为1时,左子树为空,即左子树可能出现的二叉搜索树的结构数为1.右子树上有(n - 1)个结点,此时右子树(n-1)个结点可能组成的二叉搜索树的个数为 dp[n-1]. 那么总的可能出现的二叉搜索树的结构数 dp[n] = 左子树可能结构数 * 右子树可能结构数 =…
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是. 给你一个表示十进制整数的字符串 n ,返回和为 n 的 十-二进制数 的最少数目. 示例 1: 输入:n = "32" 输出:3 解释:10 + 11 + 11 = 32 示例 2: 输入:n = "82734" 输出:8 示例 3: 输入:n = "27…
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件的子数组,则返回 0 . 示例 1: 输入:nums = [8,2,4,7], limit = 4 输出:2 解释:所有子数组如下: [8] 最大绝对差 |8-8| = 0 <= 4. [8,2] 最大绝对差 |8-2| = 6 > 4. [8,2,4] 最大绝对差 |8-2| = 6 >…
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时候,书店老板会生气. 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0. 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的. 书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次. 请你返回这一…
本着做题的心态,上了东莞理工学院的 oj 网:在选择难度的时候发现有些题目通过率和难度可能存在着某些关系,于是决定爬下这些数据简单查看一下是否存在关系. 一.新建项目 我是用 Scrapy 框架爬取的(因为刚学没多久,顺便练练手).首先,先新建 project (下载 Scarpy 部分已省略),在控制台输入 scrapy startproject onlineJudge(其中, onlineJudge为项目名称),敲击回车键新建项目完成. 二.明确目的 在动手写代码之前,先分析一下网页结构.网…
题目链接:https://nanti.jisuanke.com/t/15772 题意:中文题诶- 思路:对于坐标为p1(x1, y1), p2(x2, y2) 的两个核心, 其中 x1 <= x2 用 d(p1, p2) 表示两者间最矮的大楼,则需要时间为: 对于d(p1, p2) >= min(y1, y2)情况,cnt = abs(x2 - x1) + abs(y2 - y1) 对于d(p1, p2) < min(y1, y2)情况,cnt = y1 + y2 - 2*d(p1, p…
LeetCode 题号739中等难度 每日温度 题目描述: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]. 提示:气温 列表长度的范围是 [1, 30000].每个气温的值的均为华氏度,都是在 [30, 100] …
本文转载于DongLiYang的博客http://www.cnblogs.com/dongliyang/archive/2012/08/24/2654431.html 其中修改过一部分,针对使用注解而不是配置文件 本文分三个步骤介绍验证码图片生成以及与Struts2结合使用. Step 1.随机验证码 一步一步来,要生成验证码图片,首先要有验证码,然后才能在画在图片上.为了能够灵活控制验证码,特别编写了SecurityCode类,它向外提供随机字符串.并且可以控制字符串的长度和难度.Securi…
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或其他算数运算符. 给定两个int A和B.请返回A+B的值 测试样例: 1,2 返回:3 答案和思路:xor是相加不进位.and得到每一个地方的进位.所以,用and<<1之后去与xor异或.不断递归. import java.util.*; public class UnusualAdd { pu…
楼主个人博客:小杰博客 利用假期空暇之时,将这几年GCJ,ACM,TopCoder 參加的一些重要比赛作个 回顾.昨天是GCJ2006 的回顾,今天时间上更早一些吧,我如今还清晰记得3 年 前,我刚刚參加ACM 时參加北京赛区2005 和杭州赛区2005 的情况. 2005 年ACM-ICPC--酸甜苦辣 我进入清华大学開始本科学习的时间是2004 年8 月,在进入清华大学的第一 年里,因为基础课学习比較紧张,再加上计算机系不同意大一学生自带电脑,我没 有參加2004 年的ACM 比赛.只是在大…
数独GUI程序项目实现 导语:最近玩上了数独这个游戏,但是找到的几个PC端数独游戏都有点老了...我就想自己做一个数独小游戏,也是一个不错的选择. 前期我在网上简单地查看了一些数独游戏的界面,代码.好好地了解了一下现在数独游戏的大概的框架.当然,我自己写的小游戏,也许没那么好.但是我一定会一点点升级这个小游戏的. 目前,我做的游戏是V1.0版本的,只能说实现了这个游戏的基本功能:可以进行数独游戏.可以更换背景色以及一些其他的基本功能.接下来,在空余时间,我会进行对其中一Studying功能的实现…
---恢复内容开始--- Python学习计划   https://edu.csdn.net/topic/python2?utm_source=blog4   匠人之心,成就真正Python全栈工程师 基础学习+课堂案例+项目提升+项目实战     1Python基础(第 1 周-第 2 周) 课程目标 让学员熟练掌握 Python 语法基础. 流程控制.循环结构.函数以及面向对像等知识. 为后续课程的学习打下坚实的基础. 作业/案例 九九乘法表递归遍历目录自动提款机系统学生管理系统2048 小…
<Java Web编程>课程设计                                                                                               学生管理系统 完成日期:   2018年12月26日 1  项目引言 1.1  项目简介 学生入校后,我们需要管理这些学生,那么就需要我们对这些学生进行很多的操作,此时我们学校对学生有条理的管理,包括一些基本信息的记录,就方便了学生的信息管理. 1.2  使用技术 这是一个学…
接着第四课的内容,加入部分第五课的内容,主要介绍树形dp和LRU 第一题: 给定一棵二叉树的头节点head,请返回最大搜索二叉子树的大小 二叉树的套路 统一处理逻辑:假设以每个节点为头的这棵树,他的最大搜索二叉子树是什么.答案一定在其中 第一步,列出可能性(最难部分) 1.可能来自左子树上的某课子树 2.可能来自右子树上的某课子树 3.整颗都是(左右子树都是搜索二叉树并且左子树最大小于该节点,右子树最小大于该节点) 第二步,收集信息: 1.左树最大搜索子树大小 2.右树最大搜索子树大小 3.左树…
1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),…
2018-05-03 刷了牛客网的题目:总结思路(总的思路跟数学一样就是化简和转化) 具体启发点: 1.对数据进行预处理排序的思想:比如8皇后问题 2.对一个数组元素进行比较的操作,如果复杂,可以试试倒过来,从最后一个元素往前面想. 3.动态规划,分治法. 4.超复杂的循环最好的方法是while 1:这种写法.(因为他最大程度保证了灵活性,比如leecode的283题) leecode习题: 主要是目前在学习 玩转算法面试 leetcode 这个课程,他把leecode的题目做分类,将例题,留习…