【LeetCode】Algorithms 题集(三)

时间:2022-03-22 06:55:48

Search Insert Position

意:

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples. 

[1,3,5,6], 5 → 2

[1,3,5,6], 2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6], 0 → 0

思路:

给定一个有序数组。和一个目标元素,假设目标元素存在。则给出其在数组中相应的下标。不存在则返回一个整数。表明目标元素应该插入到数组中的位置。

非常easy的一道题。仅仅要遍历数组,有下面情况:

1. 假设找到该元素。直接返回其下标

2. 遇到第一个比它大数。返回这个数的下标。

3. 找不到比它大的数,那么应该插入到最后,返回 n。

情况 1 2 能够写在一起。

代码:
class Solution {
public:
int searchInsert(int A[], int n, int target) {
for(int i = 0;i < n;i++)
{
if(A[i] >= target)
return i;
}
return n;
}
};

Excel Sheet Column Number

题意:

Related to question Excel Sheet Column Title

Given a column title as appear in an Excel sheet, return its corresponding column number.

For example:

    A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
思路:

事实上就是个进制转换。水水就过。

假设你用 Python 的话记得获取字母的 ASCII 码要用 ord 函数,不能直接强制类型转换。

代码:
class Solution {
public:
int titleToNumber(string s) {
int len = s.size();
int ans = 0;
for(int i = 0;i < len;++i)
ans = ans*26 + s[i] - 'A' + 1;
return ans;
}
};

Remove Duplicates from Sorted List

题意:

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,

Given 1->1->2, return 1->2.

Given 1->1->2->3->3, return 1->2->3.

思路:

删除链表中的反复项,考察链表操作。

主要是用循环推断当前节点和下一级节点的值是否同样,是则改动当前节点的 next 指针指向下一节点的 next。

注意操作时要推断指针非空。

代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head){
/*保存头指针*/
ListNode* root = head; while(head != NULL)
{
/*下一节点存在,且当前节点和下一节点的值反复*/
while(head->next != NULL && head->val == head->next->val)
{
head->next = head->next->next;
}
head = head->next;
}
return root;
}
};

N-Queens

题意

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

【LeetCode】Algorithms 题集(三)

Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both
indicate a queen and an empty space respectively.

For example,

There exist two distinct solutions to the 4-queens puzzle:

[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."], ["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
思路

n 皇后问题。但要输出每一个解。仅仅要对每一行进行递归下去就好。

代码
class Solution {
public:
vector<vector<string> > solveNQueens(int n) {
/*初始化 vector 变量,第 i 个数代表第 i 行的皇后在哪一列*/
vector<int> chess(n,-1);
/*保存结果*/
vector< vector<string> > ans;
/*解决这个问题*/
solveQueen(0,n,chess.begin(),ans);
return ans;
} void solveQueen(int r,int n,vector<int>::iterator chess,vector< vector<string> > &ans)
{
/*r 等于 n 时每一行都有了皇后*/
if(r == n)
{
/*solution 用于保存一个合法解*/
vector<string> solution;
for(int i = 0;i < n;++i)
{
solution.push_back(getRowInString(n,*(chess+i)));
}
ans.push_back(solution);
return;
} /*对当前行看哪一列能够放皇后*/
for(int i = 0;i < n;++i)
{
*(chess+r) = i;
/*检查合法性*/
if(check(chess,r,n))
{
/*向下递归*/
solveQueen(r+1,n,chess,ans);
}
}
} /*检查冲突*/
bool check(vector<int>::iterator chess,int r,int n)
{
/*对之前的每一行*/
for(int i = 0;i < r;++i)
{
/*计算两列的距离*/
int dis = abs(*(chess+r) - *(chess+i));
/* dis = 0 则在同一列。 dis = r- 1 则构成等腰三角形。即对角线*/
if(dis == 0 || dis == r - i)
return false;
}
return true;
} /*构造 n 个长度的在 col 为皇后的 string */
string getRowInString(int n,int col)
{
string str(n,'.');
str.replace(col,1,"Q");
return str;
}
};

N-Queens II

题意:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

【LeetCode】Algorithms 题集(三)

思路:

n 皇后问题,算可能的方案数。

主要的简单想法是对每一行处理。处理的时候尝试在每一列放一个皇后,仅仅要不冲突就向下递归,不断计算合法方案数。

代码:
class Solution {
public:
int totalNQueens(int n) {
/*初始化 vector 变量。第 i 个数代表第 i 行的皇后在哪一列*/
vector<int> chess(n,-1);
int ans = 0;
/*解决这个问题*/
solveQueen(0,n,chess.begin(),ans);
return ans;
} void solveQueen(int r,int n,vector<int>::iterator chess,int &ans)
{
/*r 等于 n 时每一行都有了皇后*/
if(r == n)
{
ans++;
return;
} /*对当前行看哪一列能够放皇后*/
for(int i = 0;i < n;++i)
{
*(chess+r) = i;
/*检查合法性*/
if(check(chess,r,n))
{
/*向下递归*/
solveQueen(r+1,n,chess,ans);
}
}
} /*检查冲突*/
bool check(vector<int>::iterator chess,int r,int n)
{
/*对之前的每一行*/
for(int i = 0;i < r;++i)
{
/*计算两列的距离*/
int dis = abs(*(chess+r) - *(chess+i));
/* dis = 0 则在同一列, dis = r- 1 则构成等腰三角形。即对角线*/
if(dis == 0 || dis == r - i)
return false;
}
return true;
}
};

版权声明:本文博客原创文章。博客,未经同意,不得转载。

【LeetCode】Algorithms 题集(三)的更多相关文章

  1. leetcode刷题第三天&lt&semi;无重复字符的最长子串&gt&semi;

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...

  2. 算法笔记&lowbar;116&colon;算法集训之代码填空题集三(Java)

     目录 1 数组转置 2 文件管理 3 显示为树形 4 杨辉三角系数 5 圆周率与级数 6 整数翻转 7 自行车行程 8 祖冲之割圆法 9 最大5个数 10 最大镜像子串   1 数组转置 编写程序将 ...

  3. LeetCode算法题-Move Zeroes(Java实现-三种解法)

    这是悦乐书的第201次更新,第211篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第67题(顺位题号是283).给定一个数组nums,写一个函数将所有0移动到它的末尾,同 ...

  4. LeetCode算法题-First Bad Version(Java实现-三种解法)

    这是悦乐书的第200次更新,第210篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第66题(顺位题号是278).您是产品经理,目前领导团队开发新产品.不幸的是,您产品的最 ...

  5. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  6. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  7. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  8. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  9. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

随机推荐

  1. 如何使用jQuery 制作全屏幕背景的嵌入视频

    实际效果查看:http://keleyi.com/keleyi/phtml/jqtexiao/28.htm 请使用支持HTML5的浏览器查看本效果. 完整代码如下: <!doctype html ...

  2. ABAP 将SAP用户ID转换成用户名

    FORM frm_coverted_name USING usrid TYPE sy-uname                        CHANGING name TYPE adrp-name ...

  3. ArcGIS Engine要素渲染和专题图制作(转)

    摘要:Feature的常用的绘制方法包括:1.简单绘制:2.唯一值绘制/多字段唯一值绘制:3.点密度/多字段点密度绘制:4.数据分级绘制:5.质量图(饼图/直方图): 6.按比例尺渲染:7.比例符号渲 ...

  4. Windows网络共享权限设置

    文件共享权限有两种权限设置,只要理解这两种权限设置就可以在域控灵活运用. 第一种是网络共享权限 共享权限是控制用户通过网络访问共享文件夹的手段,共享权限仅当用户通过网络访问时才有效,本地用户不受此权限 ...

  5. iOS中UIKit——UIButton设置边框

    UIButton *testButton = [UIButton buttonWithType:UIButtonTypeSystem]; [testButton setFrame:CGRectMake ...

  6. JSON 之 SuperObject&lpar;8&rpar;&colon; 关于乱码的几种情况 - 向 Henri Gourvest 大师报告

    这几天学习 JSON - SuperObject, 非常幸运地得到了其作者 Henri Gourvest 大师的同步指点! (Henri 大师也是 DSPack 和 GDI+ 头文件的作者; 大师是法 ...

  7. SQL点滴26—常见T-SQL面试解析

    原文:SQL点滴26-常见T-SQL面试解析 它山之石可以攻玉,这一篇是读别人的博客后写下的,不是原原本本的转载,加入了自己的分析过程和演练.sql语句可以解决很多的复杂业务,避免过多的项目代码,下面 ...

  8. git 使用整理

    git使用 Ubuntu 14.04 安装 apt-get install git 版本查看 git --version git version 配置(全局变量,默认值.可在具体仓库中设置改仓库使用的 ...

  9. VC&num;2010 视图设计器无法打开 问题的正解

    继上次VC#2010中视图设计器无法打开的问题的讨论后,我感觉每次都重新安装一次安装包未免也太麻烦了,程序员的时间都灰常宝贵. 所以在这次人工智能作业的时候,找到了一个简单的途径: 打开VC#2010 ...

  10. Scala - 快速学习03 - 基础语法

    1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...