学习真的使我快乐~

(1)Remove Element

正常思路代码如下:

 1 public class Solution {
 2     public int removeElement(int[] nums, int val) {
 3         int count = 0;
 4         for (int i = 0; i < nums.length; i++) {
 5             if(nums[i] != val) {
 6                 nums[count++] = nums[i];
 7             }
 8         }
 9         return count;
10     }
11 }

学习使我快乐的来源,最优解题思路真的好机智!!!代码如下:

 1 public class Solution {
 2     public int removeElement(int[] nums, int val) {
 3         int i = 0;
 4         int index = nums.length - 1;
 5         while (i <= index ) {
 6             if(nums[i] == val) {
 7                 nums[i] = nums[index--];
 8             }
 9             else {
10                 i++;
11             }
12         }
13         return index + 1;
14     }
15 }

解题思路:从第一个元素开始,如果该元素与指定元素相同,则替换为最后一个元素(为防止[3,2,2,3]这种情况出现错误,不能用for循坏每次i都加一),然后最后一个元素位置减1 ,如果该元素与指定元素不同,就加1。

(2)Majority Element

最优解题思路如下:用一个变量记录主要元素,初始化为第一个元素,一个变量记录出现次数,初始化为1,遍历数组中的元素,与当前记录的主要元素相同的话,次数就加1,不同就减1,如果次数减到0,那就将主要元素换成新遍历到的元素,这样遍历完一轮得到最后记录的主要元素,就是我们要的结果。因为主要元素出现的次数大于n/2,所以可以想见最后留下来的一定会是主要元素。别的元素即使记录过也会因为次数归零抛弃掉的。这个方法只需要遍历一次数组就可以了,时间复杂度为0(n),空间复杂度为0(1).

代码如下:

 1 public class Solution {
 2     public int majorityElement(int[] nums) {
 3         int count = 0;
 4         int majorty = -1;
 5         for (int i = 0; i < nums.length; i++) {
 6             if (count == 0) {
 7                 majorty = nums[i];
 8                 count = 1;
 9             }
10             else if (majorty == nums[i]) {
11                 count++;
12             }
13             else {
14                 count--;
15             }
16         }
17         return majorty;
18     }
19 }

(3)Best Time to Buy and Sell Stock

题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。 如果只允许进行一次交易,也就是说只允许买一支股票并卖掉,求最大的收益。

解题思路:动态规划法。从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求。

代码:

 1 public class Solution {
 2     public int maxProfit(int[] prices) {
 3         if (prices.length < 2) {
 4             return 0;
 5         }
 6         int maxProfit = 0;
 7         int curMin = prices[0];
 8         for (int i = 1; i < prices.length; i++) {
 9             curMin = Math.min(curMin, prices[i]);
10             maxProfit = Math.max(maxProfit, prices[i] - curMin);
11         }
12         return maxProfit;
13     }
14 }

时间复杂度为O(n)时间,空间复杂度为O(1)。

最优解思路相通,代码略有差别,如下:

 1 public class Solution {
 2     public int maxProfit(int[] prices) {
 3         if (prices.length == 0 || prices == null) {
 4             return 0;
 5         }
 6         int maxProfit = 0;
 7         int curMin = Integer.MAX_VALUE;
 8        // int curMin = prices[0];(也可)
 9         for (int i : prices) {
10             curMin = i > curMin ? curMin : i;
11             maxProfit = maxProfit > (i - curMin) ? maxProfit : i - curMin;
12         }
13         return maxProfit;
14     }
15 }

使用了foreach循环遍历。

时间: 2024-08-02 01:12:17

学习真的使我快乐~的相关文章

[学习笔记]使你的sencha cmd跑起来

本文地址: http://blog.csdn.net/sushengmiyan/article/details/38313537 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://w

Javascript 创建对象方法的总结(每天一些学习真的很快乐)

使用Javascript创建对象的方法有很多,现在就来列举一下: 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); person.name="kevin"; person.age=31; alert(person.name); alert(person["name"]) 2. 使用对象字面量创建一个对象:不要奇怪person["5&

学习使人快乐1

智齿离开我10个小时了,现在除了书啥都不能啃········呜呜呜~     ~~~~~~~~~~~~~~~~~~~想滑滑梯~~~~~~~~~~~~~~~~~~~ 网络请求过程 web请求大多使用B/S架构 输入URL 解析ip 定位服务器 发送get请求 返回数据 http解析与浏览器缓存 dns解析 cdn架构与动态加速 原文地址:https://www.cnblogs.com/lvoooop/p/10610558.html

我爱打代码,打代码使我快乐

周末这两天一直都有些事情,所以只能抽出下午到晚上的时间来打代码了,预想中的两个网页确实是没有做出来,勉强做了一个商品详情页,总体来说还是比较满意的,然而有些东西并不会,唉-- 比较开心的是,从布局到些许细节再到能够居中的主体,都是自己做的,虽然辛苦了一些. 明天就要学习JS了,希望能体验到更多的乐趣吧. 多的不说,很晚了已经,要早点睡啊早点睡.

Django学习:使用富文本编辑器(15)

目前后台写博客的页面比较简陋,只能用来设置一些简单的文字,或者格式,而且编写不太方便.为了方便博客编写,可以使用富文本编辑器. 新增一篇文章进行测试 进入详情页,加粗效果并没有显示出来 修改详情页的模板页面blog_detail.html ----snip---- <div class='blog-content'>{{ blog.content|safe }}</div> ----snip---- 此时刷新详情页,加粗效果显示了出来. 但是在博客类型显示摘要的时候,会显示出<

20145207 《Java程序设计》第4周学习总结

前言 又到了大家最喜欢的前言时间,哈哈哈.我这个人啊,就是比较爱闲聊.正式在学校呆的第一天时间就在这里敲代码,自己都觉得自己伟大.不过好无聊呀....这周的内容说实话讲我还是挺感兴趣的,因为书上的例子讲的游戏比较心动.虽然就是简单的属性配置,但是一谈到游戏就感觉好有干劲.这么说是不是不太好~不过是真的有干劲儿的嘞!起码玩这么多的游戏,现在知道了它的属性配置也是极好的.废话不多说了,切入正题. 一.继承与多态 1.继承的定义 面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行

计算机学习心得

计算机学习心得体会 心得一:计算机学习心得体会 21世纪是一个信息经济时代,为适应时代的发展,作为一名当代大学生,所受的社会压力将比任何时候的大学生都要来得沉重,因此在校期间,我们必须尽可能的利用好学习时间,尽可能地学习更多的知识和能力,学会创新求变,以适应社会的需要. 毕竟,不管将来是要从事什么样的相关行业,都需要掌握较为全面的计算机知识,因为小到计算机的组装维修,大到服务器的维护与测试,知道的更多更全面,那么对于自己以后找工作以及参加工作帮助就越大.在知识经济时代,没有一个用人单位会傻到和知

《逆袭大学》文摘——7.1.2 中学生学习单片机的启示

7.1 找寻失去的学习潜质 (主题)学习能力最强.进步最快的时期,是婴儿期.我们要像婴儿一般地去学习. 7.1.1 我们原本就有的学习潜质 引用台湾大学教授黄武雄先生的著作<童年与解放>,儿童的三大学习潜质: 首先,辨认整体特征的能力是婴儿天生具有的自然能力. 其次,体验的勇气是婴儿的另一潜质. 再次,宽容而心无偏见,是婴儿的第三个原始创造特质. 7.1.2 中学生学习单片机的启示 学习无止境.三人行,必有我师.这样的至理名言在我的教育实践中时时显现.我从我的学生成功的学习中获得灵感,进而将之

学习Linux系统的态度及技巧

Linux作为一种简单快捷的操作系统,现在被广泛的应用.也适合越来越多的计算机爱好者学习和使用.但是对于Linux很多人可能认为很难,觉得它很神秘,从而对其避而远之,但事实真的是这样么?linux真的是我们无法跨越的横沟么?作为一个从小白到熟练掌握的运维人员,我可以负责任的告诉你:“绝对不是!” 任何知识的学习都是一个探索与前进的道路,在这个过程中我们可能是比较艰难的前进,就像刘遄在他网站上说的“体验过半夜还在培训班的心酸,和拥堵6小时的车程”.这仅仅是外在因素的苦难.但是我们也会因学有所得而兴