1、A+B问题 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符

思路:作异或得到未进位和,作与并向左移1位得到进位,随后再重复操作俩结果,直到进位为0,适合用递归

    public int aplusb(int a, int b) {
int sum = a ^ b;
int ca = (a & b) << 1;
if (ca == 0) {
return sum;
}
return aplusb(sum, ca);
}

2016-12-07

2、尾部的零 设计一个算法,计算出n阶乘中尾部零的个数

思路:有多少个5因子尾部就有多少个0,除以一次5获得包含5的一次方的个数,除以两次5获得包含5的两次方的个数(两次方有两个5因子)...以此直到除以5为0跳出

    public long trailingZeros(long n) {
long num = 0;
while (n != 0){
num += n / 5;
n /= 5;
}
return num;
}

2016-12-07

3、统计数字 计算数字k在0到n中的出现的次数,k可能是0~9的一个值

tips:由于k是0~9的值,循环时可在k开始,因为小于k的数不可能含有k

思路1:(强行获得)把所有0到n的数转成字符串,toCharArray()后用字符数组的每一位与k比较(先把每一位字符通过Character.getNumericValue()变回个位整数)

    public int digitCounts(int k, int n) {
int num = 0;
for (int i = k; i <= n; i++){
//整数变成字符串
String s = String.valueOf(i);
//字符串变成字符数组
char[] ss = s.toCharArray();
for (int j = 0; j < s.length(); j++){
//字符变成整数
int a = Character.getNumericValue(ss[j]);
if (a == k){
num++;
}
}
}
return num;
}

思路2:(数学方法获得)通过与10的余数得到末位,通过与10除去掉末位,构成一个循环,就可以分析一个数的所有位。然后把所有位都加起来(从局部到整体

    public int digitCounts(int k, int n) {
int cnt = 0;
for (int i = k; i <= n; i++) {
//分次计算每一个数中含有k的个数
cnt += singleCount(i, k);
}
return cnt;
}
public int singleCount(int i, int k) {
//排除0的情况
if (i == 0 && k == 0)
return 1;
int cnt = 0;
while (i > 0) {
//判断末尾是否为k
if (i % 10 == k) {
cnt++;
}
//去掉末尾再次循环,直到去除完所有位跳出循环
i = i / 10;
}
return cnt;
}

2016-12-08

4、丑数II 设计一个算法,找出只含素因子2,3,5的第n大的数

思路1:(时间复杂度为O(n))ArrayList动态数组保存每个满足条件的数,用三个指针遍历之前的数,分别与2,3,5相乘,得到相乘后能够比数组中的上一个数大的位置,最后把这三个指针所得结果的最小值加入数组中

    public int nthUglyNumber(int n){
List<Integer> uglys = new ArrayList<Integer>(); //创建整形动态数组;
uglys.add(1); //把特殊值1首先加入; //分别代表了与2、3、5相乘元素的序号,相当于指针;
int p2 = 0, p3 = 0, p5 = 0; //用前面各个位置的数与2,3,5相乘直到比上一个数大,并获得相应位置;
for (int i = 0; i <= n - 2; i++){
//获取数组中上一个元素,第n个数的上一个对应下标为n-2;
int lastNumber = uglys.get(i);
while (uglys.get(p2) * 2 <= lastNumber) p2++;
while (uglys.get(p3) * 3 <= lastNumber) p3++;
while (uglys.get(p5) * 5 <= lastNumber) p5++; //对比p2,p3,p5位置上分别与2,3,5相乘的结果,最小值添加为下一元素;
uglys.add(Math.min(Math.min(uglys.get(p2) * 2, uglys.get(p3) * 3), uglys.get(p5) * 5));
}
return uglys.get(n - 1);
}

思路2:(时间复杂度为O(nlogn))Map来做,还没看懂答案

2016-12-08

5、在数组中找出第k大元素

思路:利用快排思想切分位置和k对应就是第k大(由于快排是从小到大,所以对k进行转换

warm:好好理解切分思想和递归思想

    public int kthLargestElement(int k, int[] nums) {
if (nums == null || nums.length == 0) {
return -1;
}
if (k <= 0) {
return 0;
}
//使用快速排序,两指针为头尾,从小到大排序,需要转换第几大
return helper(nums, 0, nums.length - 1, nums.length - k + 1);
}
public int helper(int[] nums, int l, int r, int k) {
if (l == r) {
return nums[l];
}
//循环切分,直到找到第k大的数,不满足就递归
int position = partition(nums, l, r);
if (position == k - 1) {
return nums[position];
} else if (position < k - 1) {
return helper(nums, position + 1, r, k);
} else {
return helper(nums, l, position - 1, k);
}
}
public int partition(int[] nums, int l, int r) {
//初始化左右指针,定义切分元素
int left = l;
int right = r;
int pivot = nums[left];
//进行切分,右边元素小于pivot时赋给左边,否则移动
while (left < right) {
while (left < right && nums[right] >= pivot) {
right--;
}
//第一次循环时切分元素原位置上的数被取代
nums[left] = nums[right];
while (left < right && nums[left] <= pivot) {
left++;
}
nums[right] = nums[left];
}
nums[left] = pivot;
return left;
}

2016-12-15

6、合并两个排序的整数数组A和B变成一个新的数组

思路:先把两个数组都不溢出的情况考虑完,再判断哪一个溢出,一个溢出则另一个肯定不溢出

    public int[] mergeSortedArray(int[] A, int[] B) {
int m = A.length;
int n = B.length;
int[] C = new int[m + n];
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (A[i] < B[j]) {
C[k++] = A[i++];
} else {
C[k++] = B[j++];
}
}
while (i < m) {
C[k++] = A[i++];
}
while (j < n) {
C[k++] = B[j++];
}
return C;
}

2016-12-15

Lintcode答案&笔记的更多相关文章

  1. WebService使用JSON格式传递笔记+JQuery测试

    原文WebService使用JSON格式传递笔记+JQuery测试 因为一些因素,必须改写WebService,很传统,但是很多公司还在用.. 因为XML 的关系,不想让他传递数据的时候过度肥大,所以 ...

  2. UFLDL教程笔记及练习答案二(预处理:主成分分析和白化)

    首先将本节主要内容记录下来.然后给出课后习题的答案. 笔记: :首先我想推导用SVD求解PCA的合理性. PCA原理:如果样本数据X∈Rm×n.当中m是样本数量,n是样本的维数.PCA降维的目的就是为 ...

  3. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  4. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  5. lintcode刷题笔记(一)

    最近开始刷lintcode,记录下自己的答案,数字即为lintcode题目号,语言为python3,坚持日拱一卒吧... (一). 回文字符窜问题(Palindrome problem) 627. L ...

  6. 《C++Primer》第五版习题答案--第三章【学习笔记】

    [C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...

  7. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

  8. 《C++Primer》第五版习题答案--第六章【学习笔记】

    <C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...

  9. LintCode笔记 - 8. 旋转字符串

    这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来 原题目,各位小伙伴也可以试着做一下 . 旋转字符串 中文English 给定一个字符 ...

随机推荐

  1. linux vi 命令大全

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...

  2. MyBatis魔法堂:Insert操作详解(返回主键、批量插入)

    一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType  ...

  3. Autodesk View and Data API二次开发学习指南

    什么是View and Data API? 使用View and Data API,你可以轻松的在网页上显示大型三维模型或者二维图纸而不需要安装任何插件.通过View and Data API,你可以 ...

  4. ListView和Adapter数据适配器的简单介绍

    ListView 显示大量相同格式数据 常用属性: listSelector            listView每项在选中.按下等不同状态时的Drawable divider            ...

  5. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  6. IOS之Objective-C学习 代理设计模式

    鉴于Objective-C是不支持多继承的,所以需要用协议来代替实现其他类的方法,所以有了代理设计模式. 代理,又称委托,delegation. 代理模式可以让一个单继承的类实现父类以外其他类的方法. ...

  7. Windows环境搭建Red5流媒体服务器指南

    Windows环境搭建Red5流媒体服务器指南 测试环境:Windows 7 一.   下载安装程序 red5-server 下载地址 https://github.com/Red5/red5-ser ...

  8. 原创 C++应用程序在Windows下的编译、链接(四)动态链接

    4动态链接 4.1概述 在静态链接阶段,链接器为PE文件生成了导入表,导出表,符号表,并调整了Call指令后面的操作数,在程序调用的时候,能够直接地或者间接地定位到IAT中的某个位置,在PE文件中,该 ...

  9. nfs挂载配置

    nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...

  10. 安装phpstudy之后发现80端口被占用

    安装phpstudy之后发现80端口被占用: 进入cmd的界面,在输入"netstat -ano",按回车键后,会显示当前电脑中程序占用的端口和程序ID等等信息:看到第一条就是:0 ...