506. Relative Ranks

解题思路:

使用priority_queue。它在插入时会将数据按照由大到小的顺序插入,自然排序了。所以插入时考虑插入pair<nums[i],i>,然后根据i填充result。

注意,1) priority_queue没有迭代器,所以要遍历只能通过pop操作

2) vector要注意初始化,不然访问时可能有问题

#include <queue>
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums) {
vector<string> result(nums.size(), "");
priority_queue<pair<int, int> > p;
for (int i = 0; i < nums.size(); i++) {
p.push(make_pair(nums[i], i));
}
int count = 0;
while (p.empty() == false) {
if (count == 0) {
result[p.top().second] = "Gold Medal";
}
else if (count == 1) {
result[p.top().second] = "Silver Medal";
}
else if (count == 2) {
result[p.top().second] = "Bronze Medal";
}
else
result[p.top().second] = to_string(count + 1);
p.pop();
count ++;
}
return result;
}
};

  


551. Student Attendance Record I

解题思路:

这道题需要注意的是,L不能连续。所以只要看L的次数有没有到2次就好了。如果1) i = 0; 2) s[i-1]不是L,s[i]是L,那么设count=0。在循序中,

最后一条语句检查A和L数目的情况。不要想复杂了,最简单的方式解决就好。

bool checkRecord(string s) {
int a = 0;
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == 'A')
a ++;
if (s[i] == 'L') {
if (i == 0 || s[i-1] != 'L')
count = 0;
count ++;
}
if (a > 1 || count > 2)
return false;
}
return true;
}

  


556. Next Greater Element III

解题思路:

首先,返回-1的有以下几种情况:1) 只有一位数;2) 所有数字呈递减顺序,如9876这种;3) 转换后的数超出INT_MAX

因此,先将数字转化为字符串。然后从后往前,寻找递减序列。假设从i到num.length()-1是递减的,那么,现将这一段倒序,

然后将num[i-1]与这一段中第一个大于它的数交换,即可。例如14653,653是递减的,所以先变为14356,然后交换4和5,

变为15346。注意:最后要比较转换后的数据和INT_MAX。考虑到是字符串比对,所以需要添加长度为10的条件,免得比较

时提前终止。

int nextGreaterElement(int n) {
if (n < 10)
return -1;
string num = to_string(n);
int i;
for (i = num.length() - 1; i >= 1; i--) {
if (num[i-1] < num[i])
break;
}
// digits descends, no answer
if (i == 0)
return -1;
reverse(num.begin() + i, num.end());
for (int j = i; j < num.length(); j++) {
if (num[j] > num[i-1]) {
char temp = num[j];
num[j] = num[i-1];
num[i-1] = temp;
break;
}
}
//cout << to_string(INT_MAX) << endl;
// 2147483647
if (num.size() == 10 && num > to_string(INT_MAX))
return -1;
return stoi(num);
}

  


453. Minimum Moves to Equal Array Elements

解题思路:

sum() - min*length

int minMoves(vector<int>& nums) {
int min = nums[0];
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
if (nums[i] < min)
min = nums[i];
}
return sum - min * nums.size();
}

  


414. Third Maximum Number

https://leetcode.com/problems/third-maximum-number/#/description

解题思路:

给数组排序,然后寻找第三个最大的。。如果没有,返回最大值。

注意,因为开始时取了nums[n],遍历时又从n开始,所以count只要数2就好了。

int thirdMax(vector<int>& nums) {
sort(nums.begin(), nums.end());
int third = nums[nums.size()-1];
int count = 2;
int max = third;
for (int i = nums.size()-1; i >= 0; i--) {
if (count > 0) {
if (nums[i] < third){
third = nums[i];
count --;
}
if (count == 0)
break;
}
}
if (count != 0)
return max;
else
return third;
}

  


326. Power of Three

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

解题思路:

先取以3为底的对数,然后乘方,看是否与原值相等。注意:1) 3^0 = 1

2) log是自然对数,要取3的要换底。获得log(3,n)之后,要round,否则会WA在243那个值。。可能是精度原因。

bool isPowerOfThree(int n) {
if (n == 1)
return true;
if (n < 3)
return false;
return abs(pow(3, round(log(n)/log(3))) - n) < 1e-15;
}

367. Valid Perfect Square

Given a positive integer num, write a function which returns True if num is a perfect square else False.

Note: Do not use any built-in library function such as sqrt.

解题思路:

观察:2^2 - 1^2 = 2*1+1

3^2 - 2^2 = 2*2+1

...

x^2 - (x-1)^2 = 2*(x-1)+1

所以一个数的平方可以分解为1+3+5+....所以,只需要验证这个数是否为奇数和即可。

bool isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}

  


69. Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.

解题思路:

使用二分法。需要注意的是,left,right和mid要使用long,因为可能数值很大,超出int的范围。

int mySqrt(int x) {
if (x == 1)
return x;
// initiate as 0
long left = 0;
long right = x;
long mid = left + (right - left) / 2;
while (left + 1 < right) {
if (mid * mid > x)
right = mid;
else if (mid * mid < x)
left = mid;
else
return mid;
mid = left + (right - left) / 2;
}
// notice
return left;
}

  


  

leetcode-24-exercise的更多相关文章

  1. [LeetCode] 24 Game 二十四点游戏

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...

  2. [LeetCode] 24. Swap Nodes in Pairs 成对交换节点

    Given a linked list, swap every two adjacent nodes and return its head. You may not modify the value ...

  3. Java实现 LeetCode 24 两两交换链表中的节点

    24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...

  4. LeetCode 24 Swap Nodes in Pairs (交换相邻节点)

    题目链接: https://leetcode.com/problems/swap-nodes-in-pairs/?tab=Description   Problem: 交换相邻的两个节点     如上 ...

  5. Leetcode: 24 Game

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...

  6. LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)

    题目标签:Linked List 题目给了我们一组 linked list,让我们把每对nodes 互换位置. 新键一个dummy node,然后遍历list,每次建立 s1 和 s2 记录两个点,然 ...

  7. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  8. [leetcode 24] Swap Nodes in k-Group

    1 题目: 目前被墙,看不了. 2 思路: 比较简单,注意处理边界点就好 3 代码: public ListNode swapPairs(ListNode head) { int temp; if(h ...

  9. leetcode 24

    链表操作的,要注意标记头结点和边界问题. 代码如下: ListNode *swapPairs(ListNode *head) { if(head==NULL||head->next==NULL) ...

  10. Java [leetcode 24]Swap Nodes in Pairs

    题目描述: Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1-& ...

随机推荐

  1. Linux+.NetCore+Nginx

    Linux+.NetCore+Nginx搭建集群 本篇和大家分享的是Linux+NetCore+Nginx搭建负载集群,对于netcore2.0发布后,我一直在看官网的文档并学习,关注有哪些新增的东西 ...

  2. ExpandoObject的使用

    IDictionary<string, object> obj = new System.Dynamic.ExpandoObject(); obj.Add(); dynamic obj2 ...

  3. java的三大特性之一多态概述

    多态---概念 所谓多态就是一个引用在不同情况下的多种状态.多态是指通过指向父亲的指针,来调用在不同的子类中实现的方法. 多态---注意事项 00.java允许父类的引用变量引用它的子类的实例(对象) ...

  4. 如何在CSS中解决长英文单词的页面显示问题?CSS3

    简言 在页面排版中,经常遇到长英文单词溢出段落容器的情况,如何解决该问题?现编制如下对比演示程序: 演示程序 42du.cn-在线演示程序 部分html代码 <div class="b ...

  5. html页面和jsp页面的区别

    html页面: html页面是静态页面,可以使用html+css+js实现页面的各种效果,单纯使用html布局出来的页面是设定好的页面,可以使用本地浏览器打开.同时搭配使用ajax实现数据交互效果的页 ...

  6. ESP8266串口WiFi扩展板详解

    产品简介 ESP8266串口WiFi扩展板是深圳四博智联科技有限公司开发的一款基于乐鑫ESP8266的超低功耗的UART-WiFi模块,兼容Arduino UNO.Mega等标准主板,可以方便地进行二 ...

  7. Android 虚拟导航挡住应用底部解决方案(屏幕底部的三个按键)

    我在华为P6测试机上测试,发现底部的三个虚拟按钮遮挡了我的应用.类似效果如:https://www.zhihu.com/question/35292413#answer-28473700 解决方案 在 ...

  8. AES加密示例

    最近用到对文本内容进行加密,于是查了一下常用的加密算法: DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合:3DES(Triple ...

  9. Centos 7 搭建git服务器及使用gitolite控制权限

    一.安装git yum install git git --version #查看git版本 二.升级git(可选,如果之前已经安装git,需要升级git到最新版本) git clone https: ...

  10. Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available

    java.lang.IllegalStateException: Failed to load ApplicationContext    at org.springframework.test.co ...