LeetCode算法题解
1、给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?(181)
解法一:举例说明,为了减少复杂度,就使用八位二进制吧。设 A = 0010 1011, B = 0110 0101.
1. C = A & B = 0010 0001;
2. D = A | B = 0110 1111;
3. E = C ^ D = 0100 1110;
4. 结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit)。
至于如何判断E的二进制表示中有几个1,可以采用快速移位与方法。
算法原理如下:
1. A & B,得到的结果C中的1的位表明了A和B中相同的位都是1的位;
2. A | B, 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
经过前两步的位运算,,C 中1的位表明了A 和 B在该位都是1,D中为0的位表明了A 和 B 在该位都是0 ,所以进行第三步。
3. C ^ D,E 中为1的位表明了A 和 B不同的位。
class Solution {
/**
*@param a, b: Two integer
*return: An integer
*/
public static int bitSwapRequired(int a, int b) { /* int getNum(int n)
{
if(n==0)
{
return 0;
}
int count=0;
while(n)
{
n &= (n-1);
count++;
}
return count;
} */
int count = 0;
int c = a & b;
int d = a | b;
int n = c ^ d;
if(n == 0)
{
return 0;
}
while(n != 0)
{
n &= (n-1);
count++;
} return count;
} };
2.dp
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
//use vector to represent 2 dimension array
//hero num
int m = grid.size(), n = grid[].size();
vector<vector<int>> dp(m, <vector<int> (n));
for(int i = ; i < m; i++){
for(int j = ; j < n; j++){
if(i == ){
if(j == ){
dp[i][j] = grid[i][j];
}else{
dp[i][j] = dp[i][j-] + grid[i][j];
}
}else if(j == ){
dp[i][j] = dp[i-][j] + grid[i][j];
}else{
dp[i][j] = min(dp[i][j-], dp[i-][j]) + grid[i][j];
}
}
}
return dp[m-][n-];
}
};
3、问题描述:给定一个区间集合,合并有重叠的区间 解题思路:先对区间进行排序,按开始点进行排序,再一个一个进行合并
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
public List<Interval> merge(List<Interval> intervals) { List<Interval> result = new ArrayList<Interval>(); if(null == intervals || intervals.size() <= 0){
return result;
} Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval arg0, Interval arg1){
return arg0.start - arg1.start;
}
}); Interval prev = null;
for(Interval item: intervals){
if(null == prev || prev.end < item.start){
result.add(item);
prev = item;
}else if(prev.end < item.end){
prev.end = item.end;
}
} return result; }
}
附:上面采用java实现算法,其中排序使用了Collections.sort方法实现,这里研究一下对该方法实现排序的两种方法:
方法1:对列表对象实现Comparable接口
import java.util.*; public class collection_sort{
public static void main(String[] args){ User user = new User();
user.setName("jack");
user.setOrder(3); User user1 = new User();
user1.setName("randy");
user1.setOrder(2); List<User> list = new ArrayList<User>();
list.add(user);
list.add(user1);
Collections.sort(list);
for(User u: list){
System.out.println(u.getName());
}
}
} class User implements Comparable<User>{
private String name;
private Integer order; public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Integer getOrder(){
return order;
}
public void setOrder(Integer order){
this.order = order;
} public int compareTo(User arg0){
return this.getOrder().compareTo(arg0.getOrder());
}
}
方法2:根据Collections.sort方法重载实现
public class collection_sort{ public static void main(String[] args){ User user = new User();
user.setName("jack");
user.setOrder(3); User user1 = new User();
user1.setName("randy");
user1.setOrder(2); List<User> list = new ArrayList<User>();
list.add(user);
list.add(user1); Collections.sort(list, new Comparator<User>(){ public int compare(User arg0, User arg1){
return arg0.getOrder().compareTo(arg1.getOrder());
}
}); for(User u: list){
System.out.println(u.getName());
}
}
} class User{
private String name;
private Integer order; public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Integer getOrder(){
return order;
}
public void setOrder(Integer order){
this.order = order;
}
}
LeetCode算法题解的更多相关文章
- LeetCode 算法题解 js 版 (001 Two Sum)
LeetCode 算法题解 js 版 (001 Two Sum) 两数之和 https://leetcode.com/problems/two-sum/submissions/ https://lee ...
- 【算法】LeetCode算法题-Merge Two Sorted List
这是悦乐书的第148次更新,第150篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第7题(顺位题号是21).合并两个已排序的链表并将其作为新链表返回. 新链表应该通过拼接 ...
- 【算法】LeetCode算法题-Valid Parentheses
这是悦乐书的第147次更新,第149篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第6题(顺位题号是20),给定一个只包含字符'(',')','{','}','['和'] ...
- Leetcode 简略题解 - 共567题
Leetcode 简略题解 - 共567题 写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...
- Leetcode算法【34在排序数组中查找元素】
在之前ARTS打卡中,我每次都把算法.英文文档.技巧都写在一个文章里,这样对我的帮助是挺大的,但是可能给读者来说,一下子有这么多的输入,还是需要长时间的消化. 那我现在改变下方式,将每一个模块细分化, ...
- Leetcode算法【114. 二叉树展开为链表】
上周通过一位小伙伴,加入了一个氛围很好的小群,人不多,但是大家保持着对知识的渴望,让我很感动. 我自己也有一个群,人数也不多,但是能真正互动起来一起学习,一起进步的,还是太少.所以,现在也在学习如何让 ...
- ACM金牌选手讲解LeetCode算法《栈和队列的高级应用》
大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链 ...
- ACM金牌选手讲解LeetCode算法《哈希》
大家好,我是编程熊. 往期文章介绍了<线性表>中的数组.链表.栈.队列,以及单调栈和滑动窗口. ACM金牌选手讲解LeetCode算法<线性表> ACM金牌选手讲解LeetCo ...
- LeetCode OJ 题解
博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...
随机推荐
- C#,.Net自动生成大写字母编码
public static string GetChineseSpell(string strText) { int len = strText.Length; ...
- zju(4)使用busybox制作根文件系统
1.实验目的 1.学习和掌握busybox相关知识及应用: 2.学会使用交叉编译器定制一个busybox: 3.利用该busybox制作一个文件系统: 4.熟悉根文件系统组织结构: 5.定制.编译ra ...
- Mysql的一些常用命令
Mysql基本操作 创建表: create table test01_02(id varchar(50) not null auto_increment primary key, name nvarc ...
- Unity UGUI 裁剪TTF字体
BitBucket上找到了一个perl工程,font-optimizer.拉取代码到本地.为了运行它,还需要装Perl解释器,可以在Perl的官网上下载ActivePerl.装好ActivePerl后 ...
- XML真正强大的功能是来自其元素与封装的内容
创建文档类型声明 一般而言,XML声明放在文档顶部.在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号.查看程序清单A: 程序清单 A <?php// create do ...
- Web前端开发基础 第四课(CSS一些性质)
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签 ...
- Java语法基础思维图
- JavaScript 入门教程一 开篇介绍
一.JavaScript 刚开始是为了解决一些由服务器端进行的验证而开发的前端语言.在宽带还不普及的90年代,当用户辛苦输入很多信息并提交给服务器后,等了漫长的时间,等到的不是提交成功的提示而是某些必 ...
- 奥迪--A6L
-型号:A6L -价格:42-75W -动力:1.8T/2.5L/3T -变速箱:7挡双离合/CVT无级变速/7挡双离合 -长宽高:5.04,1.87,1.47 -油箱:75L -发动机:EA888 ...
- hibernate学习(5)——对象状态与一级缓存
1.对象状态 1.1 状态介绍 hibernate 规定三种状态:瞬时态.持久态.脱管态 瞬时态:transient,session没有缓存对象,数据库也没有对应记录.没有与hibernate关联 ...